public void WordSimilarityResolverTests_CustomCharacterSimilarityResolver_ShouldWork()
        {
            var characterSimilarityResolver = new CharacterSimilarityResolver(isCaseSensitive: true);

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

            var simila = new WordSimilarityResolver(
                characterSimilarityResolver: characterSimilarityResolver);

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


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


            AreSimilar(simila, "Monica", "Numyka");
            NotSimilar(simila, "Monica", "NUmYkA");
        }
Beispiel #2
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");
        }
        public void CharacterSimilarityResolver_WithEmptyAndNumericInputs_ShouldWork()
        {
            var simila = new CharacterSimilarityResolver(numericSimilarityRate: .3f);

            Assert.AreEqual(0f, simila.GetSimilarity('c', 'k'));
            Assert.AreEqual(0f, simila.GetSimilarity(default(char), 'k'));
            Assert.AreEqual(0f, simila.GetSimilarity('k', default(char)));
            Assert.AreEqual(0.3f, simila.GetSimilarity('3', default(char)));
            Assert.AreEqual(0.3f, simila.GetSimilarity(default(char), '4'));
        }
        public void CharacterSimilarityResolver_NotCaseSensitive_ShouldWork()
        {
            var simila = new CharacterSimilarityResolver(isCaseSensitive: false);

            Assert.AreEqual(simila.GetSimilarity('a', 'a'), 1);
            Assert.AreEqual(simila.GetSimilarity('A', 'a'), 1);
            Assert.AreEqual(simila.GetSimilarity('a', 'A'), 1);

            Assert.AreEqual(simila.GetSimilarity('a', 'b'), 0);
            Assert.AreEqual(simila.GetSimilarity('a', 'B'), 0);
        }
        public void CharacterSimilarityResolver_RawCaseSensitive_ShouldWork()
        {
            var simila = new CharacterSimilarityResolver(isCaseSensitive: true);

            Assert.AreEqual(1, simila.GetSimilarity('a', 'a'), "'a', 'a'");
            Assert.AreEqual(0, simila.GetSimilarity('A', 'a'), "'A', 'a'");
            Assert.AreEqual(0, simila.GetSimilarity('a', 'A'), "'a', 'A'");

            Assert.AreEqual(0, simila.GetSimilarity('a', 'b'), "'a', 'b'");
            Assert.AreEqual(0, simila.GetSimilarity('a', 'B'), "'a', 'B'");
            Assert.AreEqual(0, simila.GetSimilarity('c', 'k'), "'c', 'k'");
        }
        public void CharacterSimilarityResolver_WithAlgorithmAndMistake_ShouldWork()
        {
            var simila = new CharacterSimilarityResolver(
                mistakeAlgorithm: (l, r) => (l == '.' || r == '.' ? 1f : (float?)null)
                );

            simila.RegisterMistake('c', 'k', 0.7f);

            Assert.AreEqual(0, simila.GetSimilarity('a', 'B'));

            Assert.AreEqual(1, simila.GetSimilarity('.', 'b'));

            Assert.AreEqual(0.7f, simila.GetSimilarity('c', 'k'));
        }
        public void WordSimilarityResolverTests_CustomCharacterSimilarityResolverNotCaseSensitive_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 simila = new WordSimilarityResolver(characterSimilarityResolver: resolver);

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

            AreSimilar(simila, "Monica", "Numyka");
            AreSimilar(simila, "Monica", "NUmYkA");
        }
Beispiel #8
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");
        }
        public void CharacterSimilarityResolver_DefinedMistakesNotCaseSensitive_ShouldWork()
        {
            var simila = new CharacterSimilarityResolver(isCaseSensitive: false);

            simila.RegisterMistake('c', 'k', 0.7f);


            Assert.AreEqual(0, simila.GetSimilarity('a', 'b'));
            Assert.AreEqual(0, simila.GetSimilarity('a', 'B'));

            Assert.AreEqual(0.7f, simila.GetSimilarity('c', 'k'));
            Assert.AreEqual(0.7f, simila.GetSimilarity('k', 'c'));

            Assert.AreEqual(0.7f, simila.GetSimilarity('c', 'K'));
            Assert.AreEqual(0.7f, simila.GetSimilarity('K', 'c'));

            Assert.AreEqual(0.7f, simila.GetSimilarity('C', 'k'));
            Assert.AreEqual(0.7f, simila.GetSimilarity('k', 'C'));
        }
        public void CharacterSimilarityResolver_RegisterMistakesCaseSensitive_ShouldWork()
        {
            var simila = new CharacterSimilarityResolver(isCaseSensitive: true);

            simila.RegisterMistake('c', 'k', 0.7f);


            Assert.AreEqual(simila.GetSimilarity('a', 'b'), 0);
            Assert.AreEqual(simila.GetSimilarity('a', 'B'), 0);

            Assert.AreEqual(simila.GetSimilarity('c', 'k'), 0.7f);
            Assert.AreEqual(simila.GetSimilarity('k', 'c'), 0.7f);

            Assert.AreEqual(simila.GetSimilarity('c', 'K'), 0);
            Assert.AreEqual(simila.GetSimilarity('K', 'c'), 0);

            Assert.AreEqual(simila.GetSimilarity('C', 'k'), 0);
            Assert.AreEqual(simila.GetSimilarity('k', 'C'), 0);
        }
        public void WordSimilarityResolverTests_MistakeAndAlgorithm_ShouldWork()
        {
            var characterSimilarityResolver = new CharacterSimilarityResolver(isCaseSensitive: true);

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

            var simila = new WordSimilarityResolver(
                characterSimilarityResolver: characterSimilarityResolver,
                mistakeAlgorithm: (l, r) => (l.Length != r.Length ? 0f : (float?)null)
                );

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


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

            // Because of the algorithm
            NotSimilar(simila, "Afshin", "Aphshin");

            AreSimilar(simila, "Mehran", "Nahran");
            AreSimilar(simila, "Monica", "Monika");
            AreSimilar(simila, "Nonica", "Nomika");
            AreSimilar(simila, "Crespo", "Krespo");
            NotSimilar(simila, "Mehran", "RamMeh");
            NotSimilar(simila, "Penalty", "People");


            AreSimilar(simila, "Monica", "Numyka");
            NotSimilar(simila, "Monica", "NUmYkA");
        }