我正在从事一个涉及通过 Hobbs 算法进行回指解析的项目。我已经使用 Stanford 解析器解析了我的文本,现在我想操纵节点以实现我的算法。
目前,我不知道如何:
根据其 POS 标签访问节点(例如,我需要以代词开头 - 如何获取所有代词?)。
使用访问者。我对 Java 有点菜鸟,但在 C++ 中,我需要实现一个 Visitor 仿函数,然后处理它的钩子(Hook)。不过,我找不到太多关于 Stanford Parser's Tree 结构的信息。那是jgraph吗?如果是,您能否为我提供一些代码片段的指示?
最佳答案
@dhg 的回答很好,但这里还有另外两个选项,了解它们可能也很有用:
Tree
类实现了Iterable
。您可以遍历Tree
的所有节点,或者严格地说,在预序遍历中以每个节点为首的子树,使用:for (Tree subtree : t) { if (subtree.label().value().equals("PRP")) { pronouns.add(subtree); } }
您还可以通过使用
tregex
获得满足某些(可能非常复杂的模式)的节点,它的行为很像java.util.regex
允许模式匹配树。你会有这样的东西:TregexPattern tgrepPattern = TregexPattern.compile("PRP"); TregexMatcher m = tgrepPattern.matcher(t); while (m.find()) { Tree subtree = m.getMatch(); pronouns.add(subtree); }
关于java - 从解析树中获取某些节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474827/