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

Надеюсь, что это может помочь кому-то еще.

Другие вопросы по тегам