public IEnumerable <Morpheme> FindLexemes(string word, int maxDistance) { using (Trace.Entering()) { IEnumerable <Morpheme> result = Enumerable.Empty <Morpheme>(); // Try to find exact lexemes. if (myLexemes.TryGetValues(word, out ReadOnlySet <Morpheme> lexemes)) { result = lexemes; } if (maxDistance > 0) { // Also try to find lexemes which have similar morph. IEnumerable <string> similarMorphs = myLexemes.Keys.FindSimilar(word, maxDistance); if (lexemes != null) { // Note: skip morphemes already returned among exact lexemes. result = result.Concat(similarMorphs.SelectMany(x => myLexemes[x].Where(y => !lexemes.Contains(y)))); } else { result = result.Concat(similarMorphs.SelectMany(x => myLexemes[x])); } } return(result); } }
public IEnumerable <Morpheme> FindNonLexemes(string morph) { using (Trace.Entering()) { myNonLexemes.TryGetValues(morph, out ReadOnlySet <Morpheme> result); return(result ?? Enumerable.Empty <Morpheme>()); } }
public void TryGetValues() { MultiKeyDistinctValueDictionary <string, string> dictionary = new MultiKeyDistinctValueDictionary <string, string>() { { "1", "2" }, { "1", "3" }, { "2", "1" }, { "2", "2" }, }; Assert.IsFalse(dictionary.TryGetValues("bla", out ReadOnlySet <string> values)); Assert.IsTrue(dictionary.TryGetValues("1", out values)); Assert.AreEqual(2, values.Count); Assert.IsTrue(values.Contains("2")); Assert.IsTrue(values.Contains("3")); }