4

我想以 (SUBJECT,OBJECT,ACTION) 关系的形式从非结构化文本中提取关系,

例如,

“那个男孩正坐在桌子上吃鸡”

会给我,

(男孩,鸡,吃)
(男孩,桌子,位置)

ETC..

虽然 python 程序 + NLTK 可以处理如上这样一个简单的句子。

我想知道你们中是否有人使用过最好是开源的工具或库来从更广泛的领域(例如大量文本文档或网络)中提取关系。

4

1 回答 1

6

如果您的句子没有比您展示的示例复杂得多(例如,关于照应),斯坦福解析器将基于概率上下文无关语法给出良好的结果,您将能够轻松转换成你想要的格式。网上有一个演示。对于您的示例,它将给出类似

nsubj(坐着,男孩)

prep_on(坐着,桌子)

等等

如果您的句子确实变得更复杂,您可能有兴趣尝试Boxer,它基于概率组合分类语法从 C&C 解析构建话语表示结构。这些结构可能更难以适应您想要的格式,但会给您带来更大的灵活性。再次,在线提供演示。对于您的示例,它看起来像

坐(x)

男孩(y)

表(z)

代理(x,y)

上(x,z)

等等

斯坦福解析器是用 Java 编写的,在 GPL 下可用。C&C 用 C++ 编写,Boxer 用 SWI Prolog 编写。这两个不是在真正的免费许可下发布的,但是您可以获得源代码,修改它,并将其用于任何非商业项目。

在您的示例中,两者都不会为您提供“男孩”和“桌子”之间关系的特征 - 您将需要更强大的语义推理工具,我不确定是否存在这样的东西。

编辑

现在可以再次获得 C&C 和 Boxer 的源代码,以及一系列模型。

于 2013-10-27T10:42:01.363 回答