本文整理汇总了C++中CWord::IterHomonyms方法的典型用法代码示例。如果您正苦于以下问题:C++ CWord::IterHomonyms方法的具体用法?C++ CWord::IterHomonyms怎么用?C++ CWord::IterHomonyms使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CWord
的用法示例。
在下文中一共展示了CWord::IterHomonyms方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HasShortParticipleOrAdj
bool CAnalyticFormBuilder::HasShortParticipleOrAdj(const CWord& _W) const
{
for (CWord::SHomIt it = _W.IterHomonyms(); it.Ok(); ++it)
if (it->IsShortAdjectiveOrParticiple())
return true;
return false;
}
示例2: HasCommonHomonyms
bool CWord::HasCommonHomonyms(const CWord& w) const
{
if (!IsDictionary() || !w.IsDictionary()) {
SHomIt it1 = IterHomonyms();
SHomIt it2 = w.IterHomonyms();
if (it1.Ok() && it2.Ok() && TMorph::IdentifSimilar(it1->Lemma, it2->Lemma))
return true;
}
for (SHomIt it1 = IterHomonyms(); it1.Ok(); ++it1)
for (SHomIt it2 = w.IterHomonyms(); it2.Ok(); ++it2)
if (it1->Lemma == it2->Lemma)
return true;
return false;
}
示例3: AddQuoteMultiWord
void CMultiWordCreator::AddQuoteMultiWord(CWordSequence& ws, const TArticleRef& article)
{
SWordHomonymNum wh;
Wtroka str;
CWord* pNewWord = GetWordForMultiWord(ws, str, wh);
if (pNewWord->m_SourceWords.Size() == 1 && pNewWord->HasOnlyUnknownPOS()) {
size_t firstId = pNewWord->IterHomonyms().GetID();
CHomonym& h = pNewWord->GetRusHomonym(firstId);
h.SetSourceWordSequence(&ws);
h.PutArticle(article);
wh.m_HomNum = firstId;
} else {
pNewWord->m_SourceWords.SetPair(ws.FirstWord(), ws.LastWord());
if (str.size() == 0)
str = pNewWord->m_txt;
TMorph::ToLower(str);
CHomonym* pNewHom = new CHomonym(TMorph::GetMainLanguage(), str);
pNewHom->SetSourceWordSequence(&ws);
pNewHom->PutArticle(article);
wh.m_HomNum = pNewWord->AddRusHomonym(pNewHom);
}
if (article.AuxDic().IsValid()) {
const article_t* pArt = GlobalDictsHolder->GetAuxArticle(article.AuxDic());
YASSERT(pArt != NULL);
AddFoundArticle(pArt->get_kw_type(), pArt->get_title(), wh);
} else {
YASSERT(!article.Gzt().Empty());
AddFoundArticle(article.Gzt().GetType(), article.Gzt().GetTitle(), wh);
}
m_wordSequences.push_back(&ws);
}
示例4: HasDeclinableSynNounInInstrumentalis
bool CAnalyticFormBuilder::HasDeclinableSynNounInInstrumentalis(const CWord& _W) const
{
for (CWord::SHomIt it = _W.IterHomonyms(); it.Ok(); ++it)
if (IsSynNoun(*it) && it->HasGrammem(gInstrumental) && !it->HasGrammem(gNominative))
return true;
return false;
}
示例5: HasInfinitive
bool CAnalyticFormBuilder::HasInfinitive(const CWord& W)
{
for (CWord::SHomIt it = W.IterHomonyms(); it.Ok(); ++it)
if (it->HasGrammem(gInfinitive))
return true;
return false;
}
示例6: HasCompar
bool CAnalyticFormBuilder::HasCompar(const CWord& W)
{
for (CWord::SHomIt it = W.IterHomonyms(); it.Ok(); ++it)
if (it->IsFullAdjective() && it->HasGrammem(gComparative))
return true;
return false;
}
示例7: HasPredik
bool CAnalyticFormBuilder::HasPredik(const CWord& W)
{
for (CWord::SHomIt it = W.IterHomonyms(); it.Ok(); ++it)
if (!it->Grammems.IsIndeclinable()) // "бух","спасибо" не строятся с анал. формами
if (it->HasGrammem(gPraedic))
return true;
return false;
}
示例8: AllHomonymsArePredicates
bool CAnalyticFormBuilder::AllHomonymsArePredicates(const CWord& W) const
{
const TGramBitSet VerbGerundPraedic(gVerb, gGerund, gPraedic);
for (CWord::SHomIt it = W.IterHomonyms(); it.Ok(); ++it) {
if (it->HasAnyOfPOS(VerbGerundPraedic) || it->IsShortAdjectiveOrParticiple())
continue;
//verbs that can not be predicates or an.f.
if (!TAnalyticFormPredicates::Has(it->Lemma))
return false;
}
return true;
}
示例9: HasAnalyticalBe
bool CAnalyticFormBuilder::HasAnalyticalBe(const CWord& _W) const
{
//NB! в настоящем варианте парсера нет словаря оборотов, поэтому проверка слова на оборот временно отключена
// если мы попали на оборот(например, "может быть"), тогда не будем строить здесь анал. форму.
//if (_W.IsInOborot()) return false;
// "быто" предсказывается как "быть"
//if (_W.m_bPredicted) return false;
//NB! пока предсказание отсутствует в парсере
//if ( _W.HasPOS(UnknownPOS) ) return false;
if (_W.HasUnknownPOS()) return false;
for (CWord::SHomIt it = _W.IterHomonyms(); it.Ok(); ++it) {
bool is_verb = it->IsPersonalVerb();
if (is_verb && !it->IsPresentTense() && it->Lemma == kByt)
return true;
if ((is_verb || it->HasGrammem(gInfinitive)) && it->Lemma == kStat)
return true;
}
return false;
}
示例10: FindBestHomonym
static bool FindBestHomonym(const CWord& word, TWtringBuf lemma, TKeyWordType kwtype, THomonymGrammems grammems, int& homId) {
// search if we already have a multiword homonym with such text
bool found = false;
bool foundSameKwType = false;
for (CWord::SHomIt it = word.IterHomonyms(); it.Ok(); ++it)
if (it->CHomonymBase::GetLemma() == lemma) {
if (it->HasKWType(kwtype, KW_DICT)) {
if (it->Grammems == grammems) {
homId = it.GetID(); // prefer homonyms with same kwtype and same grammems
return true;
} else if (!foundSameKwType) {
homId = it.GetID(); // prefer homonyms with same kwtype
found = true;
foundSameKwType = true;
}
} else if (!found) {
homId = it.GetID(); // otherwise, return the first one having @lemma text
found = true;
}
}
return found;
}
示例11: AddMultiWordInt
SWordHomonymNum CMultiWordCreator::AddMultiWordInt(CWordSequence* ws, bool takeOnwership,
const TGramBitSet& newPos, const CWordsPair& searchAreaWP)
{
SWordHomonymNum wh = ws->GetMainWord();
Wtroka stmp;
SWordHomonymNum newWH;
CWord* pNewWord = GetWordForMultiWord(*ws, stmp, newWH);
pNewWord->m_SourceWords.SetPair(ws->FirstWord(), ws->LastWord());
TGramBitSet art_grammems; // output grammems of article
Wtroka article_title;
TKeyWordType article_type = NULL;
if (ws->HasGztArticle()) {
const TGztArticle& gzt_article = ws->GetGztArticle();
article_title = gzt_article.GetTitle();
article_type = gzt_article.GetType();
const NGzt::TMessage* lemma = gzt_article.GetLemmaInfo();
if (lemma != NULL)
art_grammems = gzt_article.GetLemmaOutputGrammems(*lemma);
} else if (ws->HasAuxArticle()) {
const article_t* pArt = GlobalDictsHolder->GetAuxArticle(ws->GetAuxArticleIndex());
art_grammems = pArt->get_new_pos();
article_title = pArt->get_title();
article_type = pArt->get_kw_type();
}
THomonymGrammems newGram;
if (!ws->GetGrammems().Empty()) {
newGram = ws->GetGrammems();
if (!newGram.HasForms() && wh.IsValid())
newGram.SetPOS(m_Words[wh].Grammems.GetPOS());
} else if (wh.IsValid() && HasToAddGrammemsFromMainWord(*ws))
newGram = m_Words[wh].Grammems;
MergeGrammems(newGram, art_grammems, newPos);
THomonymPtr pNewHom;
if (pNewWord->IsMultiWord() && (pNewWord->GetSourcePair().Size() != 1 || !wh.IsValid())) {
newWH.m_HomNum = FindOrMakeMultiwordHomonym(*ws, *pNewWord, article_type, newGram, pNewHom);
YASSERT(newWH.IsValid());
}
if (pNewHom.Get() == NULL) {
if (!pNewWord->IsMultiWord()) {
if (wh.IsValid())
newWH = wh;
else {
// just take the first homonym
newWH.m_bOriginalWord = true;
newWH.m_WordNum = pNewWord->GetSourcePair().FirstWord();
newWH.m_HomNum = pNewWord->IterHomonyms().GetID();
}
}
YASSERT(newWH.IsValid());
//часто бывает ситуация, когда мы вынуждены клонировать абсолютно одинаковые
//омонимы, различающиеся только приписанными статьями из aux_dic,
//в случае с geo_thesaurus.cxx это чревато порождением огромного количества омонимов
//(боле 50 для "Петров"), тогда если статьи не отличаются друг от друга полем СОСТАВ
//приписываемыми граммемами, ЧР и KWType, то мы омонимы не клонируем а дополнительные статьи
//записываем в CHomonym::m_KWtype2Articles. Это происходит в CWord::PutArticleIndex.
//если мы считаем, что найденные статьи для одного и того же омонима ничем не отличаются,
//то главное слово для неотличающихся стаей у ws одно и то же и ему приписана
//первая попавшаяся среди неразличимы статья
//например статьи "_петрова_2" и "_петрова_3" для нас одинаковы (отличаются только ГЕО_ЧАСТЬ
//а это неважно для парсера) и незачем плодить омонимы
bool bCloneAnyway = (!newGram.Empty() && !(m_Words[newWH].Grammems == newGram)) ||
!GlobalDictsHolder->BuiltinKWTypes().IsGeo(article_type);
if (ws->HasAuxArticle())
newWH.m_HomNum = m_Words.GetWord(newWH).PutAuxArticle(newWH.m_HomNum, ws->GetAuxArticleIndex(), bCloneAnyway);
else
newWH.m_HomNum = m_Words.GetWord(newWH).PutGztArticle(newWH.m_HomNum, ws->GetGztArticle(), bCloneAnyway);
}
YASSERT(newWH.IsValid());
AddFoundArticle(article_type, article_title, newWH, searchAreaWP);
CHomonym& h = m_Words[newWH];
h.SetSourceWordSequence(ws);
if (!newGram.Empty())
h.SetGrammems(newGram);
if (takeOnwership) {
if (!ws->HasLemmas())
NormalizeMultiWordHomonym(pNewWord, &h);
m_wordSequences.push_back(ws);
}
return newWH;
}