private void ProcessTree(SolarixGrammarEngineNET.SyntaxTreeNode node, SolarixGrammarEngineNET.GrammarEngine2 gren)
{
int p_ekey = node.GetEntryID();
int id_class = gren.GetEntryClass(p_ekey);
if (
id_class == SolarixGrammarEngineNET.GrammarEngineAPI.NOUN_ru ||
id_class == SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN2_ru ||
id_class == SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN_ru
)
{
SetLabel(node, string.Format("NP:{0}", chunk_num++), true);
for (int ileaf = 0; ileaf < node.leafs.Count; ++ileaf)
{
SolarixGrammarEngineNET.SyntaxTreeNode leaf = node.leafs[ileaf];
if (
node.GetLinkType(ileaf) == SolarixGrammarEngineNET.GrammarEngineAPI.RIGHT_GENITIVE_OBJECT_link ||
node.GetLinkType(ileaf) == SolarixGrammarEngineNET.GrammarEngineAPI.OBJECT_link
)
{
SetLabel(leaf, string.Format("NP:{0}", chunk_num++), true);
}
}
}
else if (id_class == SolarixGrammarEngineNET.GrammarEngineAPI.PREPOS_ru)
{
SetLabel(node, string.Format("PN:{0}", chunk_num++), true);
for (int ileaf = 0; ileaf < node.leafs.Count; ++ileaf)
{
SolarixGrammarEngineNET.SyntaxTreeNode leaf = node.leafs[ileaf];
int p_ekey2 = leaf.GetEntryID();
int id_class2 = gren.GetEntryClass(p_ekey2);
if (
id_class2 == SolarixGrammarEngineNET.GrammarEngineAPI.NOUN_ru ||
id_class2 == SolarixGrammarEngineNET.GrammarEngineAPI.ADJ_ru ||
id_class2 == SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN_ru ||
id_class2 == SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN2_ru ||
id_class2 == SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru
)
{
SetLabel(leaf, string.Format("NP:{0}", chunk_num++), true);
}
}
}
else if (
id_class == SolarixGrammarEngineNET.GrammarEngineAPI.IMPERSONAL_VERB_ru ||
id_class == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_ru ||
id_class == SolarixGrammarEngineNET.GrammarEngineAPI.INFINITIVE_ru
)
{
SetLabel(node, string.Format("VP:{0}", chunk_num++), true);
SetLabel(node, string.Format("VX:{0}", chunk_num++), false); // корневой глагол отмечаем как VX
for (int ileaf = 0; ileaf < node.leafs.Count; ++ileaf)
{
SolarixGrammarEngineNET.SyntaxTreeNode leaf = node.leafs[ileaf];
if (node.GetLinkType(ileaf) == SolarixGrammarEngineNET.GrammarEngineAPI.SUBJECT_link)
{
SetLabel(leaf, string.Format("NP:{0}", chunk_num++), true);
}
else if (node.GetLinkType(ileaf) == SolarixGrammarEngineNET.GrammarEngineAPI.OBJECT_link)
{
SetLabel(leaf, string.Format("NP:{0}", chunk_num++), true);
}
}
}
for (int ileaf = 0; ileaf < node.leafs.Count; ++ileaf)
{
SolarixGrammarEngineNET.SyntaxTreeNode leaf = node.leafs[ileaf];
ProcessTree(leaf, gren);
}
return;
}