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());
        }
Example #2
0
 /// <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)));
             }
         }
     }
 }