/// <summary> /// Поиск существительного по неточному совпадению с автоматическим определением рода, падежа и числа. /// Возвращает null если слово не было найдено. /// </summary> /// <param name="word">Существительное в любом роде, числе и падеже.</param> /// <param name="foundWord">Существительное, найденное в словаре.</param> /// <param name="number">Число найденного существительного.</param> /// <param name="case">Падеж найденного существительного.</param> /// <returns></returns> public CyrNoun GetOrDefault(string word, out string foundWord, out CasesEnum @case, out NumbersEnum number) { CyrNoun noun = this.GetOrDefault(word, out @case, out number); if (noun != null) { foundWord = word; return(new CyrNoun(noun)); } foundWord = this.GetSimilar(word, this.NounMinSameLetters, this.NounMaxSameLetters); if (string.IsNullOrEmpty(foundWord)) { return(null); } noun = this.GetOrDefault(foundWord, out @case, out number); if (noun != null) { noun = new CyrNoun(noun); noun.SetName(word, @case, number); return(noun); } return(null); }
/// <summary> /// Поиск существительного по неточному совпадению с указанием рода, падежа и числа. /// Возвращает null если слово не было найдено. /// </summary> /// <param name="word">Существительное.</param> /// <param name="foundWord">Существительное, найденное в словаре.</param> /// <param name="gender">Род, в котором указано существительного.</param> /// <param name="case">Падеж, в котором указано существительного.</param> /// <param name="number">Число, в котором указано существительного.</param> /// <returns></returns> public CyrNoun GetOrDefault(string word, out string foundWord, GendersEnum gender, CasesEnum @case, NumbersEnum number) { CyrNoun noun = this.GetOrDefault(word, gender, @case, number); if (noun != null) { foundWord = word; return(new CyrNoun(noun)); } DictionaryKey key = default; foundWord = null; if (this.EnableCache) { key = new DictionaryKey(word, gender, @case, number); if (this.similarSearchByKeyCache.TryGetValue(key, out foundWord)) { noun = this.GetOrDefault(foundWord, gender, @case, number); noun = new CyrNoun(noun); noun.SetName(word, @case, number); return(noun); } } foreach (string candidate in this.cyrData.GetSimilars(word, this.wordCandidates, this.NounMinSameLetters, this.NounMaxSameLetters)) { noun = this.GetOrDefault(candidate, gender, @case, number); if (noun == null) { continue; } noun = new CyrNoun(noun); noun.SetName(word, @case, number); foundWord = candidate; break; } if (this.EnableCache) { this.similarSearchByKeyCache.Add(key, foundWord); } return(noun); }