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; }
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; }