java - 从解析树中获取某些节点

标签 java nlp stanford-nlp jgrapht

我正在从事一个涉及通过 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/

相关文章:

python - 使用 NLTK 创建新语料库

Python 读取大型 txt 文件时出现 "Invalid Argument"错误

java - Stanford Core NLP LexicalizedParser 模型

java - ClassNotFoundException : edu. stanford.nlp.tagger.maxent.ExtractorNonAlphanumeric

java - 来自 JFileChooser 的奇怪错误消息

java - 加密数据库登录信息mySQL连接器

machine-learning - 使用哪个斯坦福 NLP 包进行内容分类

java - NLP - 确定一段文本是否在谈论给定的主题?

java - 使用 Spring Boot 禁用 AppClassLoader AspectJ 日志记录

java - 如何获取假脱机文件列表与其格式分开 - Java ( JT400 )