public FullLemmaInfo[] FastFindAllWord(string word) { word = word.ToUpper(); List <FullLemmaInfo> result = new List <FullLemmaInfo>(); if (Lemmas.ContainsKey(word)) { foreach (LemmaInfo li in Lemmas[word].GetItems()) { FlexiaModel flexiaModel = this.FlexiaModels[li.FlexiaModelNo]; FullLemmaInfo fi = new FullLemmaInfo(li.FlexiaModelNo, li.AccentModelNo, li.CommonAncode); fi.CommonLemma = word; fi.CommonMF = flexiaModel.FirstMF; fi.CurrentMF = flexiaModel.FirstMF; result.Add(fi); } } for (int i = 0; i <= word.Length && i < FastFlexia.Length; i++) { string end = word.Substring(word.Length - i); List <int> nos; if (FastFlexia[i].TryGetValue(end, out nos)) { foreach (int iFlexiaModelNo in nos) { FlexiaModel flexiaModel = this.FlexiaModels[iFlexiaModelNo]; MorphologicForm morphForm = flexiaModel.FindMorphologicFormByFlex(end); { if (word.StartsWith(morphForm.PrefixStr)) { string commonWord = word.Substring(morphForm.PrefixStr.Length, word.Length - morphForm.FlexiaStr.Length - morphForm.PrefixStr.Length) + flexiaModel.FirstFlex; if (Lemmas.ContainsKey(commonWord)) { foreach (LemmaInfo li in Lemmas[commonWord].GetItems()) { if (li.FlexiaModelNo == iFlexiaModelNo) { FullLemmaInfo fi = new FullLemmaInfo(li.FlexiaModelNo, li.AccentModelNo, li.CommonAncode); fi.CommonLemma = commonWord; fi.CommonMF = flexiaModel.FirstMF; fi.CurrentMF = morphForm; result.Add(fi); } } } } } } } } return(result.ToArray()); }
/// <summary> /// Adds AnCodes of all Flexia models satisfied to word. /// </summary> /// <param name="word"></param> /// <param name="result"></param> protected void FindFlex(SearchInfo searchInfo, string word) { if (Info != null) { foreach (LemmaInfo li in Info) { FlexiaModel fm = searchInfo.OriginalDictionary.FlexiaModels[li.FlexiaModelNo]; if (fm.HasFlex(word)) { searchInfo.Add(new FullLemmaInfo( li, searchInfo.FullWord.Substring(0, searchInfo.FullWord.Length - word.Length) + fm.FirstFlex, fm.FirstMF, fm.FindMorphologicFormByFlex(word))); } } } }