Как получить родительский узел в Стэнфордском JavaNLP? - PullRequest
1 голос
/ 24 апреля 2010

Предположим, у меня есть такой кусок предложения:

(NP
      (NP (DT A) (JJ single) (NN page))
      (PP (IN in)
        (NP (DT a) (NN wiki) (NN website))))

В определенный момент у меня есть ссылка на (JJ single), и я хочу получить привязку узла NP A single page.Если я правильно понял, что NP является родителем узла, A и page являются его братьями и сестрами, и у него нет дочерних элементов (?).Когда я пытаюсь использовать метод дерева .parent(), я всегда получаю ноль.API говорит, что это потому, что реализация не знает, как определить родительский узел.Другой интересный метод - .ancestor(int height, Tree root), но я не знаю, как получить корень узла.В обоих случаях, поскольку анализатор знает, как делать отступы и группировать деревья, он должен знать «родительское» дерево, верно?Как я могу получить это?Спасибо

Ответы [ 2 ]

0 голосов
/ 09 июля 2016

Если вы сохраняете ссылку на корень дерева, вы можете использовать метод parent(Tree root), чтобы получить родительский элемент для любого узла в дереве. Предположим, что корень дерева упоминается как root, а узел JJ упоминается как jjTree, тогда jjTree.parent(root) вернет родительский узел NP.

0 голосов
/ 25 апреля 2010

Похоже, что Tree сам по себе никогда не вернет родителя узла, поскольку он жестко задан в источниках Tree. Между тем TreeGraphNode переопределяет этот метод и работает хорошо. Изменить дерево на TreeGraphNode так же просто, как

TreeGraphNode sentence = new TreeGraph(tree).root();
...