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