本文整理汇总了C++中CGroup::SetGrammems方法的典型用法代码示例。如果您正苦于以下问题:C++ CGroup::SetGrammems方法的具体用法?C++ CGroup::SetGrammems怎么用?C++ CGroup::SetGrammems使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CGroup
的用法示例。
在下文中一共展示了CGroup::SetGrammems方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: format_for_modif_adj_groups
bool CRusFormatCaller::format_for_modif_adj_groups (CGroup& G)
{
if (get_maximal_group_no(G.m_iFirstWord) != -1) return false;
int j = G.m_iFirstWord;
if( FindInList((const char*)g_strAdjModif, g_AdjModifCount, Wj.get_lemma()) == -1)
return false;
if( j+1 >= sent.size() )
return false;
const CGroup& H = get_maximal_group(j+1);
if( !is_morph_adj(sent[H.m_MainWordNo]) )
return false;
if( !GetGramTab()->GleicheGenderNumberCase(sent[H.m_MainWordNo].m_type_gram_code, sent[H.m_MainWordNo].m_gramcodes, Wj.m_gramcodes ) )
return false;
G.m_iLastWord = H.m_iLastWord;
G.m_GroupType = MODIF_ADJ;
G.SetGrammems (H.GetGrammems() & sent[j].GetGrammems());
G.m_MainGroup = H;
change_words_in_group_grammems(G, G.GetGrammems(), (rAllNumbers | rAllCases));
create_syn_rel(G, H.m_MainWordNo, j , MODIF_ADJ);
return true;
}
示例2:
// Kanzler Gerhard Schröder
// Bundeskanzler Alexey Sokirko
// A-Techniker Gerhard Schroder
bool CGerFormatCaller :: format_for_rank_fam (CGroup& G)
{
int i = get_main_word(G.m_iFirstWord);
if (!Wi.m_lemma) return false;
if ( !Wi.HasFlag(fl_ranknoun) ) return false;
size_t j = 0;
const CGroup& main_gr = get_maximal_group(G.m_iFirstWord);
j = main_gr.m_iLastWord+1;
if ( j == sent.size() ) return false;
const CGroup& next_gr = get_maximal_group(j);
if ( next_gr.m_GroupType!= gFAMILIE_GROUP
&& next_gr.m_GroupType!= gSPNAME
&& next_gr.m_GroupType!= gPNAME
) return false;
G.m_iLastWord = next_gr.m_iLastWord;
G.SetGrammems( Wi.GetGrammems() );
G.m_MainGroup = main_gr;
G.m_GroupType = gBERUF_NP;
create_syn_rel(G,i,j,gBERUF_NP);
return true;
};
示例3: format_for_anat_compar
// Правила для БОЛЕЕ или МЕНЕЕ + прил или кр.прил
bool CRusFormatCaller::format_for_anat_compar(CGroup& G)
{
//более извращенная любительница
size_t i = G.m_iFirstWord;
const CGroup& MaxGrp = get_maximal_group(i);
if (MaxGrp.m_iFirstWord != MaxGrp.m_iLastWord) return false;
if ( !Wi.is_word_upper("БОЛЕЕ")
&& !Wi.is_word_upper("МЕНЕЕ")
) return false;
size_t j = i + 1;
if (j >= sent.size()) return false;
if (get_maximal_group_size(j) != 1) return false;
if (is_morph_adj(Wj) || is_morph_participle (Wj))
{
G.m_GroupType = ANAT_COMPAR;
G.m_iLastWord = j;
G.m_MainGroup.m_iFirstWord = j;
G.m_MainGroup.m_iLastWord = j;
G.SetGrammems( Wj.GetGrammems() );
create_syn_rel(G, j, i, ANAT_COMPAR);
return true;
}
return false;
};
示例4:
bool CRusFormatCaller :: format_for_rank_surname (CGroup& G)
{
const CGroup& main_gr = get_maximal_group(G.m_iFirstWord);
int i = main_gr.m_MainWordNo;
if (!Wi.get_lemma()) return false;
if ( !Wi.HasFlag(fl_ranknoun) ) return false;
size_t j = main_gr.m_iLastWord+1;
if ( j == sent.size() ) return false;
j = get_main_word(j);
if ( !Wj.has_grammem( rSurName ) && !Wj.has_grammem( rName ) ) return false;
if ( !GetGramTab()->GleicheCaseNumber(Wi.GetGramcodes(), Wj.GetGramcodes()) ) return false;
G.m_iLastWord = get_maximal_group(j).m_iLastWord;
G.SetGrammems( Wi.GetGrammems() );
G.m_MainGroup = main_gr;
G.m_GroupType = RANK_NAMES;
G.m_Cause = "Правила сборки Должность+ФИО";
create_syn_rel(G,i,j,RANK_NAMES);
return true;
};
示例5:
bool CGerFormatCaller :: format_for_geo_names (CGroup& G)
{
size_t j = get_main_word(G.m_iFirstWord);
if (!CanBeCityType(Wj))
return false;
size_t i = j;
if( ++i >= sent.size() )
return false;
int main_word = get_main_word(i);
if (main_word == -1) return false;
if ( !sent[main_word].HasFlag(fl_morph_predicted)
&& !sent[main_word].has_grammem(gStd)
)
return false;
G.m_iLastWord = get_maximal_group(i).m_iLastWord;
G.m_GroupType = gGEOGR;
G.SetGrammems( get_maximal_group(j).GetGrammems() );
G.m_MainGroup = get_maximal_group(j);
create_syn_rel(G, j, main_word, gGEOGR);
return true;
};
示例6: format_for_noun_detached_adj_postposition
// Правила для обособ. прил. в постпозиции\\Этим вопросом, давно и надолго забытым, \\.
bool CRusFormatCaller::format_for_noun_detached_adj_postposition(CGroup& G)
{
size_t i, j;
i = G.m_iFirstWord;
const CGroup& MaxGrp = get_maximal_group(i);
if (MaxGrp.m_iFirstWord != MaxGrp.m_iLastWord)
i = MaxGrp.m_MainWordNo;
else
i = MaxGrp.m_iFirstWord;
if ( !Wi.is_morph_noun() && !is_morph_pronoun(Wi)) return false;
j = MaxGrp.m_iLastWord + 1;
if (j == sent.size()) return false;
if (!Wj.HasFlag(fl_comma)) return false;
j++;
if (j == sent.size()) return false;
const CGroup& MaxGrpAdj = get_maximal_group(j);
if (MaxGrpAdj.m_iFirstWord != MaxGrpAdj.m_iLastWord)
j = MaxGrpAdj.m_MainWordNo;
else
j = MaxGrpAdj.m_iFirstWord;
if (!is_morph_adj(Wj)) return false;
if ( !(MaxGrpAdj.m_iLastWord == sent.size()-1)
&& !sent[MaxGrpAdj.m_iLastWord+1].HasFlag(fl_comma)
)
return false;
bool bGr = false;
if ( GetGramTab()->GleicheGenderNumberCase(Wi.m_type_gram_code, Wi.GetGramcodes(),Wj.GetGramcodes()) )
bGr = true;
if ((Wi.GetGrammems() & (1 <<rPlural)) && (Wj.GetGrammems() & (1 <<rSingular)))
if ( GetGramTab()->GleicheCase(Wi.GetGramcodes(), Wj.GetGramcodes()))
bGr = true;
if ((Wi.GetGrammems() & (1 <<rSingular)) && (Wj.GetGrammems() & (1 <<rPlural)))
if (GetGramTab()->GleicheCase(Wi.GetGramcodes(), Wj.GetGramcodes()))
bGr = true;
if (bGr == true)
{
G.m_GroupType = NOUN_DETACHED_ADJ;
G.m_iFirstWord = MaxGrp.m_iFirstWord;
G.m_iLastWord = MaxGrpAdj.m_iLastWord;
G.m_MainGroup = MaxGrp;
G.SetGrammems( Wi.GetGrammems() );
create_syn_rel(G, i, j, NOUN_DETACHED_ADJ);
return true;
}
return false;
};
示例7: format_for_plural_noun_adj
// Правила для "черная и белая ракетки; черные шкаф и стул"
bool CRusFormatCaller::format_for_plural_noun_adj(CGroup& G)
{
const CGroup& AdjMaxGrp = get_maximal_group(G.m_iFirstWord);
size_t adj_main_word = get_main_word_in_group(AdjMaxGrp);
const CSynPlmLine& Adj = sent[adj_main_word];
size_t noun_main_word = get_next_main_word(adj_main_word);
if (noun_main_word == sent.size()) return false;
const CSynPlmLine& Noun = sent[noun_main_word];
const CGroup& NounMaxGrp = get_maximal_group(noun_main_word);
if (!Adj.GetGramcodes() || !Noun.GetGramcodes()) return false;
bool bCase1 =
( (AdjMaxGrp.m_GroupType == SIMILAR_ADJS)
&& (Noun.GetGrammems() & _QM(rPlural))
&& Noun.is_morph_noun( )
&& (NounMaxGrp.size() == 1)
&& GetGramTab()->GleicheCase(Adj.GetGramcodes(), Noun.GetGramcodes())
);
bool bCase2 =
(
(NounMaxGrp.m_GroupType == SIMILAR_NOUN_GROUPS)
&& Noun.is_morph_noun( )
&& (Adj.GetGrammems() & _QM(rPlural))
&& (Noun.GetGrammems() & _QM(rSingular))
&& AdjMaxGrp.size() == 1
&& is_morph_adj(Adj)
&& GetGramTab()->GleicheCase(Adj.GetGramcodes(),Noun.GetGramcodes())
);
if (bCase1 || bCase2)
{
G.m_GroupType = NOUN_ADJ;
G.m_iFirstWord = AdjMaxGrp.m_iFirstWord;
G.m_iLastWord = NounMaxGrp.m_iLastWord;
G.m_MainGroup = NounMaxGrp;
G.SetGrammems( NounMaxGrp.GetGrammems() );
create_syn_rel(G, noun_main_word, adj_main_word, NOUN_ADJ);
return true;
}
return false;
};
示例8: format_for_genit_NP
bool CGerFormatCaller::format_for_genit_NP (CGroup& G)
{
const CGroup& MainGroup = get_maximal_group(G.m_iFirstWord);
int i = get_main_word_in_group(MainGroup);
if (!is_morph_noun(sent[i])) return false;
if (MainGroup.m_iLastWord+1 == sent.size()) return false;
const CGroup& GenitGroup = get_maximal_group(MainGroup.m_iLastWord+1);
int j = get_main_word_in_group(GenitGroup);
//if ( (GenitGroup.GetGrammems() & gAllCases) != _QM(gGenitiv) ) return false;
if ( !(GenitGroup.GetGrammems() & _QM(gGenitiv)) ) return false;
if ( !is_morph_noun(sent[j])
&& !sent[j].HasFlag(fl_adjective_as_noun)
)
{
return false;
};
if ( (GenitGroup.GetGrammems() & gAllCases) != _QM(gGenitiv) )
{
if ( (GenitGroup.m_GroupType != gDET_ADJ_NOMEN)
&& (GenitGroup.m_GroupType != gADJ_NOMEN)
)
return false;
if ( (GenitGroup.size() == 2)
&& IstZahlWort(sent[GenitGroup.m_iFirstWord])
)
return false;
};
G.m_GroupType = gGENIT_NP;
G.m_MainGroup = MainGroup;
G.m_iLastWord = GenitGroup.m_iLastWord;
G.SetGrammems( MainGroup.GetGrammems() );
create_syn_rel(G, i, j, gGENIT_NP);
return true;
};
示例9: format_for_noun_adj_postposition
// Правила для \\Человек этот, неожиданно увидев нечто впечатляющее, отпрянул, но ничего страшного не произошло\\.
bool CRusFormatCaller::format_for_noun_adj_postposition(CGroup& G)
{
int i = get_main_word (G.m_iFirstWord);
if (!Wi.is_morph_noun()) return false;
if (Wi.m_UnitType != EWord) return false;
int j = get_next_main_word(i);
if (j == sent.size()) return false;
if (!is_morph_adj(Wj)) return false;
if (Wj.m_UnitType != EWord) return false;
if (! GetGramTab()->GleicheGenderNumberCase(Wi.m_type_gram_code, Wi.GetGramcodes(), Wj.GetGramcodes()) ) return false;
G.m_GroupType = NOUN_ADJ_POSTPOSITION;
G.m_iLastWord = get_maximal_group(j).m_iLastWord;
G.m_MainGroup = get_maximal_group(i);
G.SetGrammems( Wi.GetGrammems() );
create_syn_rel(G, i, j, NOUN_ADJ_POSTPOSITION);
return true;
};
示例10: format_for_genit_in_preposition
bool CGerFormatCaller::format_for_genit_in_preposition(CGroup& G)
{
const CGroup& GenitGroup = get_maximal_group(G.m_iFirstWord);
int i = get_main_word_in_group(GenitGroup);
if (!is_morph_noun(sent[i])) return false;
if (GenitGroup.m_iLastWord+1 == sent.size()) return false;
if ( (GenitGroup.GetGrammems() & gAllCases) != _QM(gGenitiv) ) return false;
const CGroup& MainGroup = get_maximal_group(GenitGroup.m_iLastWord+1);
int j = get_main_word_in_group(MainGroup);
if (!is_morph_noun(sent[j]) ) return false;
G.m_GroupType = gGENIT_PRE;
G.m_MainGroup = MainGroup;
G.m_iLastWord = MainGroup.m_iLastWord;
G.SetGrammems( MainGroup.GetGrammems() );
create_syn_rel(G, j, i, gGENIT_NP);
return true;
};
示例11:
bool CGerFormatCaller :: format_for_adv_zal (CGroup& G)
{
size_t i = get_main_word(G.m_iFirstWord);
if( get_maximal_group_no(i) != -1 )
return false;
if (CanBeNumeralModifier(Wi))
{
i++;
}
else
if ( (i+1 < sent.size())
&& sent[i].is_lemma("BIS")
&& sent[i+1].is_lemma("ZU")
)
{
i+=2;
}
else
return false;
if( i >= sent.size() )
return false;
int main_word = get_main_word(i);
if( !IstZahlWort(sent[main_word]) )
return false;
G.m_iLastWord = get_maximal_group(i).m_iLastWord;
G.m_GroupType = gMODIF_NUMER;
G.SetGrammems( get_maximal_group(i).GetGrammems() );
G.m_MainGroup = get_maximal_group(i);
create_syn_rel(G, get_main_word(G.m_iLastWord) , get_main_word(G.m_iFirstWord), gMODIF_NUMER);
return true;
};
示例12: format_for_noun_groups
bool CRusFormatCaller::format_for_noun_groups (CGroup& G)
{
const CGroup& FirstChild = get_maximal_group(G.m_iFirstWord);
if (FirstChild.m_iFirstWord != G.m_iFirstWord) return false;
int i = get_main_word_in_group(FirstChild);
if (!is_left_noun_modifier (Wi)) return false;
if( Wi.is_lemma("КОТОРЫЙ") )
return false;
string debug_str;
bool bFound_VSE = false; //слово "всe" начинает группу
bool bFoundParticiple = false; //нашли дст., пе, причастие
bool bAdjShouldBeInNominativOrGenitiv = false; //чтобы собрать "две красивых девочки"
//gleiche_for_small_numbers
int NounGroupNo;
if( Wi.get_upper_word()
&& !strcmp(Wi.get_upper_word(), "ВСЕ")
&& Wi.is_lemma("ВЕСЬ")
&& (get_maximal_group_size(i) == 1)
)
bFound_VSE = true;
if ( Wi.has_grammem(rActiveVoice)
&& Wi.has_grammem(rTransitive)
&& Wi.HasPOS(PARTICIPLE)
)
bFoundParticiple = true;
if ((G.m_iFirstWord+1) >= sent.size()) return false;
// собираем группу "сам себя"
int j;
if ( Wi.is_lemma( "САМ") )
{
G.m_iLastWord = get_maximal_group(G.m_iFirstWord).m_iLastWord + 1;
if (G.m_iLastWord < sent.size())
{
NounGroupNo = get_maximal_group_no(G.m_iLastWord);
j = (NounGroupNo == -1 ) ? G.m_iLastWord : GetGroups()[NounGroupNo].m_MainWordNo;
if ( Wj.is_lemma("СЕБЯ")
|| Wj.is_lemma("ТЫ")
|| Wj.is_lemma("Я")
|| Wj.is_lemma("МЫ") // "сами мы не местные"
)
if ((Wi.GetGrammems() & Wj.GetGrammems() & rAllCases) > 0)
{
i = j;
G.SetGrammems (Wi.GetGrammems() & Wj.GetGrammems() & (rAllCases | rAllGenders));
goto CreateGroup;
};
};
};
// нахождение последовательности П1 ... Пn С, где Пi - прилагательное или группа прилагательных,
// а С - ИГ.
// Согласование по падежу, числу и роду будет проверяться в другом цикле.
G.SetGrammems ( Wi.GetGrammems() );
for ( G.m_iLastWord = get_maximal_group(G.m_iFirstWord).m_iLastWord + 1;
G.m_iLastWord < sent.size();
G.m_iLastWord = get_maximal_group(G.m_iLastWord).m_iLastWord + 1
)
{
int i_gr = get_maximal_group_no(G.m_iLastWord);
i = (i_gr == -1) ? G.m_iLastWord:GetGroups()[i_gr].m_MainWordNo;
if( Wi.is_lemma("КОТОРЫЙ") )
return false;
if( i_gr != -1 )
{
G.SetGrammems (G.GetGrammems() & GetGroups()[i_gr].GetGrammems());
}
else
{
G.SetGrammems( G.GetGrammems() & Wi.GetGrammems() );
if( GetGramTab()->IsSimpleParticle(Wi.get_lemma(), Wi.GetPoses()) && (i > G.m_iFirstWord) )
continue;
}
if ( !is_left_noun_modifier (Wi)) break;
if ( Wi.has_grammem(rActiveVoice)
&& Wi.has_grammem(rTransitive)
&& Wi.HasPOS(PARTICIPLE)
)
bFoundParticiple = true;
}; // end of for by "G.m_iLastWord"
if (G.m_iLastWord < sent.size())
G.m_iLastWord = get_maximal_group(G.m_iLastWord).m_iLastWord;
/*
//.........这里部分代码省略.........
示例13: format_for_whose_clause
bool CRusFormatCaller::format_for_whose_clause(CGroup& G) //правило построения группы с придаточным определительным;
{
int j;
int i = get_main_word (G.m_iFirstWord);
if (i != G.m_iFirstWord) return false;
if (Wi.m_UnitType == EWord) return false;
if (!Wi.HasFlag(fl_relative_clause)) return false;
if (i == 0) return false;
const CGroup& MaxGrp = get_maximal_group(i-1);
for (j = MaxGrp.m_iLastWord; j >= MaxGrp.m_iFirstWord; j--)
{
assert(j != -1);
if ( !Wj.is_morph_noun()) continue;
int m = -1;
for (int f = 0; f < GetGroups().size(); f++)
if (GetGroups()[f].m_iFirstWord <= j && GetGroups()[f].m_iLastWord == i-1)
{
m = f;
break;
}
int varMainWrd;
if (m != -1)
varMainWrd = GetGroups()[m].m_MainWordNo;
else
varMainWrd = j;
if ( GetGramTab()->GleicheGenderNumber(Wi.m_gramcodes, Wj.m_gramcodes ) )
if (varMainWrd == j || j == i-1)
{
G.m_GroupType = WHOSE_SUBORDINATE;
G.m_iLastWord = G.m_iFirstWord;
if (varMainWrd == j && m != -1)
G.m_iFirstWord = GetGroups()[m].m_iFirstWord;
else
G.m_iFirstWord = j;
G.m_MainGroup.m_iFirstWord = G.m_iFirstWord;
if (varMainWrd == j && m != -1)
G.m_MainGroup.m_iLastWord = GetGroups()[m].m_iLastWord;
else
G.m_MainGroup.m_iLastWord = j;
G.SetGrammems( Wj.GetGrammems() );
for (m = GetGroups().size()-1; m >= 0; m--)
{
if (GetGroups()[m].m_iFirstWord < G.m_iFirstWord && GetGroups()[m].m_iLastWord == i-1)
m_GroupsToRebuild.push_back(GetGroups()[m]);
};
return true;
}
if (m != -1 && GetGroups()[m].m_iLastWord == i-1)
if (GetGroups()[m].m_GroupType == SIMILAR_NOUN_GROUPS)
if (GetGramTab()->GleicheCase(Wi.m_gramcodes, Wj.m_gramcodes) )
{
G.m_GroupType = WHOSE_SUBORDINATE;
G.m_iLastWord = G.m_iFirstWord;
G.m_iFirstWord = GetGroups()[m].m_iFirstWord;
G.m_MainGroup.m_iFirstWord = GetGroups()[m].m_iFirstWord;
G.m_MainGroup.m_iLastWord = GetGroups()[m].m_iLastWord;
G.SetGrammems ( GetGroups()[m].GetGrammems() );
for (m = GetGroups().size()-1; m >= 0; m--)
if (GetGroups()[m].m_iFirstWord < G.m_iFirstWord && GetGroups()[m].m_iLastWord == i-1)
m_GroupsToRebuild.push_back(GetGroups()[m]);
return true;
}
}
return false;
};
示例14: format_for_partic_clause
bool CRusFormatCaller::format_for_partic_clause(CGroup& G)
{
int j;
int i = get_main_word (G.m_iFirstWord);
if (i != G.m_iFirstWord) return false;
if (Wi.m_UnitType == EWord) return false;
if (Wi.m_ClauseType != PARTICIPLE_T) return false;
if (i == 0) return false;
const CGroup& MaxGrp = get_maximal_group(i-1);
for (j = MaxGrp.m_iLastWord; j >= MaxGrp.m_iFirstWord; j--)
{
assert(j != -1);
if ( !Wj.is_morph_noun()) continue;
if ( Wj.HasFlag(fl_ile)) continue;
int m = -1;
for (int f = 0; f < GetGroups().size(); f++)
if (GetGroups()[f].m_iFirstWord <= j && GetGroups()[f].m_iLastWord == i-1)
{
m = f;
break;
}
int varMainWrd;
if (m != -1)
varMainWrd = GetGroups()[m].m_MainWordNo;
else
varMainWrd = j;
if ( GetGramTab()->GleicheGenderNumberCase(Wi.m_type_gram_code, Wi.m_gramcodes, Wj.m_gramcodes )
|| ( sent[MaxGrp.m_iFirstWord].HasFlag(fl_small_number)
&& ((Wi.GetGrammems() & ( (1 << rGenitiv) | (1 << rPlural))) == ( (1 << rGenitiv) | (1 << rPlural)) )
)
)
if (varMainWrd == j || j == i-1)
{
G.m_GroupType = NOUN_PARTICIPLE;
G.m_iLastWord = get_maximal_group(G.m_iFirstWord).m_iLastWord;
if (varMainWrd == j && m != -1)
G.m_iFirstWord = GetGroups()[m].m_iFirstWord;
else
G.m_iFirstWord = j;
G.m_MainGroup.m_iFirstWord = G.m_iFirstWord;
if (varMainWrd == j && m != -1)
G.m_MainGroup.m_iLastWord = GetGroups()[m].m_iLastWord;
else
G.m_MainGroup.m_iLastWord = j;
G.SetGrammems( Wj.GetGrammems() );
for (m = GetGroups().size()-1; m >= 0; m--)
if ( GetGroups()[m].m_iFirstWord < G.m_iFirstWord
&& GetGroups()[m].m_iLastWord == i-1
)
m_GroupsToRebuild.push_back(GetGroups()[m]);
return true;
}
if (m != -1 && GetGroups()[m].m_iLastWord == i-1)
if (GetGroups()[m].m_GroupType == SIMILAR_NOUN_GROUPS)
if (GetGramTab()->GleicheCase(Wi.m_gramcodes,Wj.m_gramcodes))
{
G.m_GroupType = NOUN_PARTICIPLE;
G.m_iLastWord = G.m_iFirstWord;
G.m_iFirstWord = GetGroups()[m].m_iFirstWord;
G.m_MainGroup.m_iFirstWord = GetGroups()[m].m_iFirstWord;
G.m_MainGroup.m_iLastWord = GetGroups()[m].m_iLastWord;
G.SetGrammems( GetGroups()[m].GetGrammems() );
for (m = GetGroups().size()-1; m >= 0; m--)
if (GetGroups()[m].m_iFirstWord < G.m_iFirstWord && GetGroups()[m].m_iLastWord == i-1)
m_GroupsToRebuild.push_back(GetGroups()[m]);
return true;
}
}
return false;
};