void CMultiWordCreator::GetFoundWordsInPeriod(const SArtPointer& artP, yvector<SWordHomonymNum>& foundWords, const CWordsPair& wp) const { foundWords.clear(); //сначала пытаемся найти среди KwType, которые уже искались на всем предложении, те, которые //входят в наш отрезок if (artP.HasKWType()) { ymap<TKeyWordType, yvector<SWordHomonymNum> >::const_iterator it = m_KW2Words.find(artP.GetKWType()); if (it != m_KW2Words.end()) { const yvector<SWordHomonymNum>& whs = it->second; for (size_t i = 0; i < whs.size(); i++) { CWord& w = m_Words.GetWord(whs[i]); if (wp.Includes(w.GetSourcePair())) foundWords.push_back(whs[i]); } } } if (!foundWords.empty()) return; //пытаемся найти среди StrType, которые уже искались на всем предложении, те, которые //входят в наш отрезок if (artP.HasStrType()) { ymap<Wtroka, yvector<SWordHomonymNum> >::const_iterator it = m_Title2Words.find(artP.GetStrType()); if (it != m_Title2Words.end()) { const yvector<SWordHomonymNum>& whs = it->second; for (size_t i = 0; i < whs.size(); ++i) { CWord& w = m_Words.GetWord(whs[i]); if (wp.Includes(w.GetSourcePair())) foundWords.push_back(whs[i]); } } } if (!foundWords.empty()) return; //теперь проходим по запомненным отрезкам, для которых хранятся все найденные MultiWords ymap<CWordsPair, yvector<SWordHomonymNum> >::const_iterator it = m_FoundWordsByPeriod.find(wp); if (it != m_FoundWordsByPeriod.end()) { const yvector<SWordHomonymNum>& whs = it->second; for (size_t i = 0; i < whs.size(); i++) { const CHomonym& h = m_Words[whs[i]]; if (h.HasArticle(artP, KW_DICT)) foundWords.push_back(whs[i]); } } }
void CQuotesFinder::AddFiosFromPeriod(int SentNo, const CWordsPair& Pair, yvector<SFactAddress>& FioInQuotes) { CSentenceRusProcessor* pSentPrc = GetSentPrc(SentNo); yvector<SWordHomonymNum>* fioWHs = pSentPrc->GetMultiWordCreator().GetFoundWords(GlobalDictsHolder->BuiltinKWTypes().Fio, KW_DICT); if (fioWHs) for (size_t i=0; i < fioWHs->size(); i++) { const CHomonym& pHom = pSentPrc->m_Words[(*fioWHs)[i] ]; if (Pair.Includes(*pHom.GetSourceWordSequence())) { SFactAddress A; A.m_HomNum = (*fioWHs)[i].m_HomNum; A.m_WordNum = (*fioWHs)[i].m_WordNum; A.m_bOriginalWord = (*fioWHs)[i].m_bOriginalWord; A.m_iSentNum = SentNo; FioInQuotes.push_back(A); } } }