Пример #1
0
int Pronoun::advanced(Text *t, int a, int b, int c) {
  if (t->is_category_non_recursive("Opening",a,b+1) == 1 || t->is_category_non_recursive("De01",a,b+1) == 1) {
    set_possessive(1);
    t->make_only(a,b,this);
  }
  if (t->is_only_category_non_recursive("Noun",a,b+1) == 1) {
    set_possessive(1);
    t->make_only(a,b,this);
  }
  if (t->is_category_non_recursive("Adjective",a,b+1) == 1 && t->is_category_non_recursive("Verb",a,b+1) != 1) {
  if (t->is_category_non_recursive("Cadverb",a,b+1) != 1 && t->is_category_non_recursive("Noun",a,b+2) == 1) {
      set_possessive(1);
      t->make_only(a,b,this);
    }
  }
  return 1;
}
Пример #2
0
bool CEngSynthes::try_pronoun_node(int node_no)
{
	if(E.m_Nodes[node_no].IsAbstract() || !node_is_pronoun(node_no)) return false;
	if(E.m_Nodes[node_no].m_Words.size() != 1) return false;
	CEngSemWord &EngWord = E.m_Nodes[node_no].m_Words[0];


	bool is_norm  = false;
	int rel = get_in_rel(node_no);
	if (rel != -1)
	  if (E.m_Nodes[E.m_Relations[rel].m_SourceNodeNo].m_NodeType == MNA)
		rel = get_in_rel(E.m_Relations[rel].m_SourceNodeNo);

	//  если местоимение - подлежащее или стоит в именительном падеже, то это номинатив,
	// иначе его нужно преобразовать в объектную форму.
	if (rel != -1 && is_subj_rel(rel))	is_norm = true;
	if (EngWord.HasOneGrammem(eNominative))	is_norm = true;
	
	
	if (lemma_is_demonstrative_pronoun (EngWord.m_Lemma))
	{
		long ParadigmId = helper.GetParadigmIdByLemma(morphEnglish, EngWord.m_Lemma,  ePN_ADJ);
		// создаем множественное число 
		if (ParadigmId != -1)
			if  (E.m_Nodes[node_no].GetGrammemsRich() & _QM(eSingular) )
		     EngWord.m_Word = helper.create_form_by_id(ParadigmId, _QM(eSingular));
			else
			 EngWord.m_Word = helper.create_form_by_id(ParadigmId, _QM(ePlural));
	}
	else
	if (!is_norm)
	{
		long ParadigmId = helper.GetParadigmIdByLemma(morphEnglish, EngWord.m_Lemma, ePN);
		// не у всех местоимений есть объектная форма
		if (ParadigmId != -1)
		 EngWord.m_Word = helper.create_form_by_id(ParadigmId, _QM(eObjectCase));
	};

	if ( EngWord.HasOneGrammem(ePossessive) )
		set_possessive(EngWord);

	if(EngWord.m_Word == "i") EngWord.m_Word= "I";


	Res(node_no).m_Article = ZeroArticle;
	Res(node_no).m_WordForms.push_back(EngWord.m_Word);

	// sons are here
	vector<long > rels;
	get_out_rels(node_no, rels);
	for(int i = 0; i < rels.size(); i++){
		translate_node(E.m_Relations[rels[i]].m_TargetNodeNo);
	}	

	handle_rel_operators(node_no);
	return true;
}