예제 #1
0
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]);
        }
    }
}
예제 #2
0
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);
            }
        }
}