【问题标题】:How to get a verb connecting two nouns in an Apache OpenNLP parse tree?如何在 Apache OpenNLP 解析树中获得连接两个名词的动词?
【发布时间】:2014-03-21 10:18:27
【问题描述】:

假设存在,找出连接解析树中两个名词的动词的好策略是什么?例如,在这句话中:

那个男人回家前打电话给他的妻子。

鉴于输入“男人”和“妻子”,我想得到动词“叫”。 OpenNLP 给了我一个解析树:

(TOP(S(NP(DT))(NN男))(VP(VBD叫)(NP(PRP$他)(NN老婆))(PP(IN前)(S(VP(VBG来) (ADVP (RB back)))))) (.home.)))

所以我想这至少部分是一个树导航问题。也许 先将所有动词分离出来,然后向下递归进行测试,直到最终找到两个名词?

或者尝试找到从一个名词到另一个名词的最短路径并在途中保存动词?

我的问题是我对解析树结构的了解不够,无法设计出一个好的策略。或者我应该使用其他 (Java) 工具吗?

谢谢!

【问题讨论】:

    标签: opennlp parse-tree


    【解决方案1】:

    您要完成的任务非常复杂。我在这里看到的最大问题是需要“连接两个名词的动词”。这是非常通用的,您可能已经看到解析树可以假设非常不同(甚至是“错误”)的结构。

    如果您想要更通用的方法来解决问题,我建议您寻找关系提取。该技术旨在从句子中提取二元(或 n 元)关系。 我建议的示例工具是:

    以后者为例,您可以从句子中提取主体-动作-对象形式的关系。关于你的问题,如果两个名词分别是短语的主语和宾语,这将起作用。

    如果你真的想得到连接两个名字的动词我认为树的导航是最直接的解决方案,但正如我之前指出的那样,考虑到“不完美”和非- 自然语言短语的标准结构。

    【讨论】:

    • 你说的是对的,我注意到解析树有时是错误的或非常复杂。关系提取可能是正确的方法,所以我会尝试 MaltParser。我以前看过它,因为我需要一个库,而不是独立软件。感谢您为我指明这个方向。
    • @Solipsy 不客气!但是,您可以将混响用作库。我现在在我的一个 Java 项目中使用它,你真的只需要将它设置为 pom 文件(如果你使用 Maven)。它直接集成了 OpenNLP 的功能。
    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多