Stanford Parser: Как получить путь к родительскому элементу C ---> root?
Это картина Стэнфорда Парсера
У меня есть дерево Стэнфордского парсера в виде картинки. Я хочу получить путь C'parent - > для root. Пример: путь родительского элемента "но" -> root = CC S Root или путь родительского элемента "it" - > корень: PRP NP VP VP VP Root. Но я не знаю, как это сделать. Я использую Stanford Parser для анализа заявления.
statement = "I have a dog , but I don't like it"
Annotation document = new Annotation(statement);
pipeline.annotate(document);
List<CoreMap> sentences = document
.get(CoreAnnotations.SentencesAnnotation.class);
for (CoreMap sentence : sentences) {
Tree tree = sentence.get(TreeCoreAnnotations.TreeAnnotation.class);
List<Tree> leaves = new ArrayList<>();
leaves = tree.getLeaves(leaves);
for (Tree leave : leaves) {
String compare = leave.toString();
if(compare.equals(data.connective) == true) {
// How to get path but --> root
}
}
1 ответ
Tree
имеет parent()
метод, который возвращает родителя узла дерева, или null
если нет Так что вы должны иметь возможность сделать что-то вроде этого внутри цикла for:
for (Tree leave : leaves) {
String compare = leave.toString();
if(compare.equals(data.connective) == true) {
Tree curr = leave;
while (curr != null) {
System.out.println(curr.toString());
curr = curr.parent(); // will be null if no parent
}
break;
}
}
Я думаю, что это еще одно решение.
Сначала я использовал DFS для доступа к каждому нужному узлу, а затем использовал метод с именем.
- pathNodeToNode (узел1, узел2)
Этот метод относится к классу дерева StanfordNLP. Вот ссылка на метод https://nlp.stanford.edu/nlp/javadoc/javanlp-3.5.0/edu/stanford/nlp/trees/Tree.html
Надеюсь, что это может помочь кому-то еще.