private Sentence ConvertToSentence(Parse parse) { if (parse.Type == MaximumEntropyParser.TopNode) { parse = parse.GetChildren()[0]; } PartSentence parseSentence = ConvertParseToSentence(parse); var result = new Sentence(parseSentence); if (!parse.IsPosTag) { AddChildNodes(result, parseSentence, parse.GetChildren()); } else { //внутри есть только слова Word word = ConvertToWord(result, parse); parseSentence.AddWord(word); } return(result); }
private void AddChildNodes(Sentence sentence, PartSentence partSentence, IEnumerable <Parse> childParses) { foreach (Parse childParse in childParses) { if (childParse.Type == MaximumEntropyParser.TokenNode) { continue; } if (childParse.IsPosTag) { //внутри есть только слова Word word = ConvertToWord(sentence, childParse); partSentence.AddWord(word); continue; } //есть вложенные части предложений - обработать их PartSentence childPartSentence = ConvertParseToSentence(childParse); childPartSentence.Parent = partSentence; partSentence.AddChildren(childPartSentence); AddChildNodes(sentence, childPartSentence, childParse.GetChildren()); } }