本文整理汇总了C++中CGroup::GetGrammems方法的典型用法代码示例。如果您正苦于以下问题:C++ CGroup::GetGrammems方法的具体用法?C++ CGroup::GetGrammems怎么用?C++ CGroup::GetGrammems使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CGroup
的用法示例。
在下文中一共展示了CGroup::GetGrammems方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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: 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;
/*
//.........这里部分代码省略.........