例如,“鹦鹉不游泳。”这里的主要动词是“游泳”。我们如何通过语言处理来提取它?是否有任何已知的算法用于此目的?
答案 0 :(得分:5)
您可以对句子运行dependency parsing算法,并找到root
关系的依赖项。例如,通过Stanford Parser online demo运行句子“Parrots不游泳”,我得到以下依赖项:
nsubj(swim-4, Parrots-1)
aux(swim-4, do-2)
neg(swim-4, not-3)
root(ROOT-0, swim-4)
这些行中的每一行都提供有关句子中两个单词之间不同语法关系的信息(见下文)。你需要最后一行,它表示swim
是句子的根,即主要动词。因此,要提取主谓词,首先执行依赖项解析并找到读取root(ROOT-0, X)
的依赖项。 X
将成为主要动词。
有几个现成的依赖解析器,例如Stanford CoreNLP或Malt parser可用的依赖解析器。我更喜欢斯坦福,因为它的准确性相当,但有更好的文档,并支持多线程解析(如果你有很多文本)。 Stanford解析器输出XML,因此您必须解析它以获取上面的依赖信息。
为了完整起见,简要解释其余的输出。第一行说parrots
,句子中的第一个单词,是swim
的主语,第四个单词。第二行表示do
是与swim
相关的辅助动词,第三行表示not
否定swim
。有关每个依赖关系含义的更详细说明,请参阅Stanford typed dependency manual。
编辑:
根据您定义main verb
的方式,某些句子可能包含多个主要动词,例如: I like cats and hate snakes
。对此的依赖关系解析包含依赖关系:
root(ROOT-0, like-2)
conj(like-2, hate-5)
一起说,根据解析器,主要动词是like
,但是hate
与它结合在一起。出于您的目的,您可能希望将like
和hate
都视为主要内容。
答案 1 :(得分:-1)
要获得动词(或任何其他Part-Of-Speech),可以使用许多有监督和无监督的算法,如Viterbi算法,隐马尔可夫模型,Brill Tagger,Constraint Grammer等。即使我们有像{{3}这样的库用于Python(以及类似的也可用于Java),其中已经编码了这些算法。在任何文档或句子中注释POS是一项复杂的工作(特别是当你需要高精度时)并且你需要在这个领域有深入的知识,首先从基础知识开始,持续的努力可能会导致你开发一个更高的算法效率比普遍的效率高。