如何在Stanford';什么是JavaNLP?

如何在Stanford';什么是JavaNLP?,java,data-structures,tree,nlp,stanford-nlp,Java,Data Structures,Tree,Nlp,Stanford Nlp,假设我有这样一个句子: (NP (NP (DT A) (JJ single) (NN page)) (PP (IN in) (NP (DT a) (NN wiki) (NN website)))) 在某个特定时刻,我有一个对(JJ single)的引用,我想获得NP节点绑定一个页面。如果我没有弄错的话,NP是节点的父节点,A和page是节点的兄弟节点,它没有子节点(?)。当我尝试使用树的.parent()方法时,我总是得到null。API说这是因为实现不

假设我有这样一个句子:

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

在某个特定时刻,我有一个对
(JJ single)
的引用,我想获得
NP
节点绑定
一个页面。如果我没有弄错的话,
NP
是节点的父节点,
A
page
是节点的兄弟节点,它没有子节点(?)。当我尝试使用树的
.parent()
方法时,我总是得到null。API说这是因为实现不知道如何确定父节点。另一个有趣的方法是
.祖先(int-height,Tree-root)
,但我不知道如何获取节点的根。在这两种情况下,因为解析器知道如何缩进和分组树,所以它必须知道“父”树,对吗?我怎样才能得到它?谢谢

看起来
本身永远不会返回节点的父节点,因为它是在
源中硬编码的。同时,
TreeGraphNode
覆盖了该方法,效果良好。将树更改为TreeGraphNode非常简单

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

如果保留对树的根的引用,则可以使用方法
parent(tree root)
获取树中任何节点的父节点。假设树根被称为
root
,而JJ节点被称为
jjTree
,那么
jjTree.parent(root)
将返回父NP节点。

@dmcer-fine,因此存在
语句.transform(transformer)
方法,有单独的transformer类和另一个启动转换的transformer类。您建议将当前根保留在哪里?@dmcer-在我覆盖的转换方法中,我需要知道正在转换的当前树的父级。由于transform方法的唯一参数是树,因此如何获取该树的父级?也就是说,我想在转换时使用root,而不是after@dmcer-它以深度优先、从左到右的顺序被应用
遍历,并在每个节点上调用树转换器
。要转换树,我需要有关其父树的信息。这样我就可以在一个地方保存所有处理特定树的代码。您建议将此代码移到代码中,处理所有节点的所有可能父节点?我认为这可能不值得争论。是的,可以确保您正在转换的所有
对象实际上都是
TreeGraph
的实例,这样您就可以调用
parent()
。但是,如果其他人错误地给它一个常规的
对象,您将得到一个
TreeTransformer
,它抛出一个
RuntimeException
/
NullPointerException
异常。您能否编辑此问题和答案,以提及
TreeTransformer
以及使用
Tree.transform
的问题?也可以添加您在树上执行的操作。您可以添加更多信息吗?如果我已经遍历了一棵树,并且在一个节点
tree
,我可以根据您的代码创建一个
TreeGraphNode
。然而,当我调用
语句.parent()
时,我得到了一个NullPointerException。谢谢兄弟,现在我终于可以继续编写我的脚本了