Example #1
0
        public void LevenshteinWordAlgorithm_CustomCharacterSimilarityResolverCaseSensitive_ShouldWork()
        {
            var resolver = new CharacterSimilarityResolver(isCaseSensitive: true);

            resolver.RegisterMistake('m', 'n', 0.8f);
            resolver.RegisterMistake('o', 'u', 0.7f);
            resolver.RegisterMistake('i', 'y', 0.8f);
            resolver.RegisterMistake('c', 'k', 0.6f);

            resolver.RegisterMistake('X', 'A', 0.9f);

            var algorithm = new LevenshteinAlgorithm <Word, char>(resolver);

            AreSimilar(algorithm, "XXXXX", "AAAAA");
            NotSimilar(algorithm, "xxxxx", "aaaaa");


            AreSimilar(algorithm, "Mehran", "Nehran");
            NotSimilar(algorithm, "MEHRAN", "mehran");
            AreSimilar(algorithm, "Afshin", "Aphshin");
            AreSimilar(algorithm, "Mehran", "Nahran");
            AreSimilar(algorithm, "Monica", "Monika");
            AreSimilar(algorithm, "Nonica", "Nomika");
            AreSimilar(algorithm, "Crespo", "Krespo");
            NotSimilar(algorithm, "Mehran", "RamMeh");
            NotSimilar(algorithm, "Penalty", "People");


            AreSimilar(algorithm, "Monica", "Numyka");
            NotSimilar(algorithm, "Monica", "NUmYkA");
        }
Example #2
0
 public PhraseSimilarityResolver(
     IMistakeRepository <Phrase>?mistakesRepository    = null,
     Func <Phrase, Phrase, float?>?mistakeAlgorithm    = null,
     ISimilarityResolver <Word>?wordSimilarityResolver = null
     )
     : base(mistakesRepository, mistakeAlgorithm)
 {
     Algorithm = new LevenshteinAlgorithm <Phrase, Word>(wordSimilarityResolver ?? new WordSimilarityResolver());
 }
Example #3
0
 public WordSimilarityResolver(
     IMistakeRepository <Word>?mistakesRepository           = null,
     Func <Word, Word, float?>?mistakeAlgorithm             = null,
     ISimilarityResolver <char>?characterSimilarityResolver = null
     )
     : base(mistakesRepository, mistakeAlgorithm)
 {
     Algorithm = new LevenshteinAlgorithm <Word, char>(characterSimilarityResolver ?? new CharacterSimilarityResolver());
 }
        public void LevenshteinPhraseAlgorithm_ShouldWork_Default()
        {
            var algorithm =
                new LevenshteinAlgorithm <Phrase, Word>(
                    new WordSimilarityResolver()
                    );

            AreSimilar(algorithm, "Mehran Davoudi", "Nehran Dawoody");
            AreSimilar(algorithm, "Afshin Alizadeh", "Aphshin Alizade");

            NotSimilar(algorithm, "Lilian Alpha", "Lamborghini Beta");
            NotSimilar(algorithm, "Crash the world", "Clash of clawns");
        }
Example #5
0
        public void LevenshteinWordAlgorithm_DefaultNotCaseSensitive_ShouldWork()
        {
            var algorithm = new LevenshteinAlgorithm <Word, char>(new CharacterSimilarityResolver(mistakesRepository: new BuiltinCharacterMistakesRepository()));

            AreSimilar(algorithm, "Mehran", "Nehran");
            AreSimilar(algorithm, "MEHRAN", "mehran");
            AreSimilar(algorithm, "Afshin", "Aphshin");
            AreSimilar(algorithm, "Mehran", "Nahran");
            AreSimilar(algorithm, "Monica", "Monika");
            AreSimilar(algorithm, "Nonica", "Nomika");
            AreSimilar(algorithm, "Crespo", "Krespo");
            AreSimilar(algorithm, "Monica", "Numyka");

            NotSimilar(algorithm, "Mehran", "RamMeh");
            NotSimilar(algorithm, "Penalty", "People");
        }
Example #6
0
        public void LevenshteinWordAlgorithm_CustomCharacterSimilarityResolver_ShouldWork()
        {
            var resolver = new CharacterSimilarityResolver();

            resolver.RegisterMistake('m', 'n', 0.8f);
            resolver.RegisterMistake('o', 'u', 0.7f);
            resolver.RegisterMistake('i', 'y', 0.8f);
            resolver.RegisterMistake('c', 'k', 0.6f);
            resolver.RegisterMistake('X', 'A', 0.9f);

            var algorithm = new LevenshteinAlgorithm <Word, char>(resolver);

            AreSimilar(algorithm, "XXXXX", "AAAAA");
            AreSimilar(algorithm, "xxxxx", "aaaaa");

            AreSimilar(algorithm, "Monica", "Numyka");
            AreSimilar(algorithm, "Monica", "NUmYkA");
        }
Example #7
0
        public void LevenshteinWordAlgorithm_Default_CaseSensitive_ShouldWork()
        {
            var algorithm = new LevenshteinAlgorithm <Word, char>(new CharacterSimilarityResolver(isCaseSensitive: true));

            AreSimilar(algorithm, "Mehran", "Nehran");
            NotSimilar(algorithm, "MEHRAN", "mehran");

            AreSimilar(algorithm, "Afshin", "Aphshin");
            AreSimilar(algorithm, "Mehran", "Nahran");
            AreSimilar(algorithm, "Monica", "Monika");
            AreSimilar(algorithm, "Nonica", "Nomika");
            AreSimilar(algorithm, "Crespo", "Krespo");


            NotSimilar(algorithm, "XXXXX", "AAAAA");
            NotSimilar(algorithm, "xxxxx", "aaaaa");

            NotSimilar(algorithm, "Mehran", "RamMeh");
            NotSimilar(algorithm, "Penalty", "People");
            NotSimilar(algorithm, "Monica", "Numyka");
        }
        private void NotSimilar(LevenshteinAlgorithm <Phrase, Word> algorithm, string left, string right)
        {
            var similarity = algorithm.GetSimilarity(left, right);

            Assert.IsTrue(similarity < 0.5, $"{left}-{right} should NOT be similar (Similarity: {similarity})");
        }
Example #9
0
        private void AreSimilar(LevenshteinAlgorithm <Word, char> algorithm, string left, string right)
        {
            var similarity = algorithm.GetSimilarity((Word)left, (Word)right);

            Assert.IsTrue(similarity > 0.6, $"{left}-{right} should be similar (Similarity: {similarity})");
        }