public void dictForText(Dictionary <string, List <string> > wordForms, CourseMeta.CacheDict res) { var entries = new Dictionary <string, DictFoundRes>(); foreach (var wordForm in wordForms) //kv.key - hledane slovo, kv.Value - hledane slovo + lowercase hledane slovo + seznam zakladnich tvaru slova { DictEntryObj dictEntry = find(wordForm.Value); //vrat ze vsech kandidatu jedno nalezne entry (dle zvolene strategie) if (dictEntry == null) { res.notFound.Add(wordForm.Key); continue; } //nenalezeno => dej mezi nenalezene string key = DictFoundRes.getKey(dictEntry.type, dictEntry.entryId); //nalezeno - klic DictFoundRes entry; if (!entries.TryGetValue(key, out entry)) { entries.Add(key, entry = new DictFoundRes { entry = dictEntry }); // najdi dle klice lock (dictEntry) { var snd = dictEntry.entry.Descendants("sound").FirstOrDefault(); var sndVal = snd == null ? null : snd.Value; if (sndVal != null) { if (sndVal.StartsWith("@")) { snd.Remove(); } else { res.externals.Add(sndVal); } } } } entry.words.Add(wordForm.Key); //pridej ohyb tvar } res.dict = createDict(entries.Values); //k nalezenym heslum vytvori slovnik res.dict.crsLang = crsData.crsLang; res.dict.natLang = natLang; }
public void createDict(Langs crsLang, Langs natLang, IEnumerable <string> words, CourseMeta.CacheDict res) { var crsData = getCrsData(crsLang); var forms = crsData.getWordsForms(words.Distinct().OrderBy(w => w)); crsData.getNatData(natLang).dictForText(forms, res); }