gpt4 book ai didi

java - 将子节点添加到斯坦福树

转载 作者:行者123 更新时间:2023-11-30 03:54:36 25 4
gpt4 key购买 nike

我正在尝试将新节点添加到斯坦福解析 tree虽然我目前尝试的方法不起作用:

所以我使用 TregexMatcher 并返回一棵树,如下所示:

(VP 
(VB run)
(PP
(To to)
(NP
(DT the)
(NN shop)
)
)
)

我正在尝试插入(VBD 所做的)成为(VP)给出树的第一个 child :

(VP 
(VBD did)
(VB run)
(PP
(To to)
(NP
(DT the)
(NN shop)
)
)
)

这是我尝试过的代码:

private Tree addNode(Tree tree, Label posTag, Label value, int index) {

SimpleTree posNode = new SimpleTree(posTag);
posNode.setValue(posTag.value());

SimpleTree valueNode = new SimpleTree(value);
valueNode.setValue(value.value());

posNode.addChild(valueNode);

tree.insertDtr(posNode, index);
return tree;
}

我一直在使用 online documentation虽然我不确定如何解决这个问题。

我哪里出错了?有人可以将我链接到网上的示例吗?

编辑:上述代码后更改的树是:

(VP
( )
(VB run)
(PP
(TO to)
(NP
(DT the)
(NN shop)
)
)
)

最佳答案

错误在于使用SimpleTreeSimpleTree 只是一个没有节点标签的树结构,因此没有多大用处。我在文档中添加了一条注释来说明这一点。使用LabeledScoredTreeNode它工作得很好:

private static Tree addNodeFixed(Tree tree, Label posTag, Label value, int index) {
Tree posNode = new LabeledScoredTreeNode(posTag);
posNode.setValue(posTag.value());
Tree valueNode = new LabeledScoredTreeNode(value);
valueNode.setValue(value.value());
posNode.addChild(valueNode);

tree.insertDtr(posNode, index);
return tree;
}

但是,如果您无论如何都使用 Tregex 来匹配树,您可能会发现使用 Tsurgeon 更容易完成任务。不过,请注意插入时的无限循环!

private static Tree addNodeTsurgeon(Tree tree, String tag, String word) {
TregexPattern pat = TregexPattern.compile("__=root !> __ !< " + tag);
TsurgeonPattern surgery = Tsurgeon.parseOperation(
"insert (" + tag + " " + word +") >1 root");
return Tsurgeon.processPattern(pat, surgery, tree);
}

关于java - 将子节点添加到斯坦福树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23554113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com