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"); }
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"); }
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"); }