2016-06-21 122 views
0

我正在尝试使用CoreNLP测试/运行斯坦福OpenIE程序。不完整的斯坦福OpenIE输出

http://nlp.stanford.edu/software/openie.html

http://stanfordnlp.github.io/CoreNLP/openie.html

这里是我的命令:java -mx1g -cp stanford-corenlp-3.6.0.jar;stanford-corenlp-3.6.0-models.jar;CoreNLP-to-HTML.xsl;slf4j-api.jar;slf4j-simple.jar edu.stanford.nlp.naturalli.OpenIE

我的输入文件包含以下内容:

Born in Honolulu, Hawaii, Obama is a US Citizen. 
Born in a small town, she took the midnight train going anywhere. 

我得到以下输出:

1.0 Obama is US Citizen 
1.0 she Born in small town 
1.0 she Born in town 

根据Angeli等人在题为“Leveraging Linguistic Structure For Open Domain Information Extraction”的论文中提到的例子,我期待更多的三元组,例如(Obama; born in; Honolulu, Hawaii)(She; took; midnight train)。为什么输出不完整?

另外,OpenIE实现中使用了哪种类型的依赖关系解析?

谢谢!

回答

0

这些是依赖分析中的错误。在论文发表后,我们转向了Universal Dependencies,这大大改变了底层的解析器。您可以在http://corenlp.run

解析句子旁边看到OpenIE。在第一种情况下,从“公民”到“出生”的圆弧不正确。在第二种情况下,ccomp边缘从“采取”到“去”是造成问题。在旧的表示中,这是一个vmod,从“接”到“火车”。您可以尝试改为:

Born in Honolulu, Obama is a US Citizen. 
Born in a small town, she took the midnight train. 
+0

谢谢您的澄清。 有没有办法在3.6.0版本中使用旧依赖项来更改注释器? 下面是我想要做的一个例子: 我想在http://corenlp.run中提取有意义的三元组,例如'铁的质量是55 amu'或'铁有质量55 amu'的输出。但是“铁质量是55 amu”的输出产生_(质量;是; 55amu)_这是毫无意义的。像_(铁的质量;是; 55amu)_就会很好。您如何使用斯坦福OpenIE提取这种提取物的想法如何? 我感谢您的帮助。 –

+0

啊,这是一个可爱的例子。好吧,在GitHub仓库的头部(以及corenlp.run,模数跨度可视化错误)中,我们现在将认识到'铁质量是55 amu'(铁质量是55amu)。关系不是“有质量”的唯一原因是为了避免为“有”创建虚拟标记 - 尽可能地,OpenIE试图保持对句子中原始标记的引用。 –

+0

感谢您更新代码。因为“出生在任何地方”,我看到由于ccomp的缘故,没有提取物。但对于'我确信他做了''也有'从'某个'到'做'的'ccomp'。它不应该产生两个上下文无关的三元组,例如“(他;做;它)”和“(我;我;确定)” - 对吧? 所以我的问题是,我只想要三元组,可以独立解析复杂的输入,例如'.. midnight train..'。通过编辑'子句分离器'工作来定制/更改这种方式? 非常感谢您的帮助! –