当前位置: 首页>>代码示例>>C++>>正文


C++ CGroup::SetGrammems方法代码示例

本文整理汇总了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;
}
开发者ID:deNULL,项目名称:seman,代码行数:26,代码来源:Gleiche.cpp

示例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;
};
开发者ID:tvi123,项目名称:rep123,代码行数:30,代码来源:Familien.cpp

示例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;		
};
开发者ID:eamosov,项目名称:lspl,代码行数:27,代码来源:Names.cpp

示例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;
};
开发者ID:eamosov,项目名称:lspl,代码行数:25,代码来源:Names.cpp

示例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;

};
开发者ID:deNULL,项目名称:seman,代码行数:26,代码来源:GerGeo.cpp

示例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;
};
开发者ID:eamosov,项目名称:lspl,代码行数:51,代码来源:Names.cpp

示例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;		
};
开发者ID:eamosov,项目名称:lspl,代码行数:47,代码来源:Names.cpp

示例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;
};
开发者ID:deNULL,项目名称:seman,代码行数:44,代码来源:GenitNP.cpp

示例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;		
};
开发者ID:eamosov,项目名称:lspl,代码行数:21,代码来源:Names.cpp

示例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;
};
开发者ID:deNULL,项目名称:seman,代码行数:20,代码来源:GenitNP.cpp

示例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;


};
开发者ID:deNULL,项目名称:seman,代码行数:38,代码来源:Numeralia.cpp

示例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;

	/*
//.........这里部分代码省略.........
开发者ID:deNULL,项目名称:seman,代码行数:101,代码来源:Gleiche.cpp

示例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;	
};
开发者ID:deNULL,项目名称:seman,代码行数:73,代码来源:Gleiche.cpp

示例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;	
};
开发者ID:deNULL,项目名称:seman,代码行数:81,代码来源:Gleiche.cpp


注:本文中的CGroup::SetGrammems方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。