0

我想取一组英语句子并将它们转换为一组关系。例如

“飞行员开飞机。” 将映射到以下关系:

flies(pilot, airplane)

“鲍勃是爱丽丝和道格的父亲。” 将映射到

father(Bob, Alice)
father(Bob, Doug)

我知道我以前看过一个 python 库来做这样的事情,但是尽管我进行了所有的搜索,但我还是找不到。我以前从未做过 NLP 编程,所以我可能会错误地使用术语。我很抱歉。

更新:这不是生成 Prolog 的努力,而是生成关于话语世界的二进制(和其他)事实。然后可以将这些事实插入到对象角色模型中,并帮助生成数据库模式。上面的“苍蝇”事实只是为了说明,对输出的语法没有要求。它必须是常规输出。

在语言方面,我想我希望看到一个动词短语和两个名词短语来捕捉一个二元事实。这些结构的方式并不像能够以自动方式识别结构那么重要。

4

1 回答 1

1

您似乎正在将自然语言转换为 Prolog(XSB?)。一般来说,没有简单(甚至相当困难)的方法来自动化这个过程。但是,对于您问题中的简单句子,您需要使用typed dependency parsing。这将为您提供主语、宾语和动词。一旦你有了这些,你就可以编写一个简单的脚本来获取你的元组。

Python 的自然语言工具包 (NLTK) 不支持类型依赖。(见这个答案

斯坦福的解析器将帮助您解决这个问题(正如 Prateek 在评论中提到的那样)。请注意,您需要使用类型化依赖项。

您的例句“飞行员驾驶飞机”。将产生

det(pilot-2, A-1)
nsubj(flies-3, pilot-2)
root(ROOT-0, flies-3)
det(airplane-5, an-4)
dobj(flies-3, airplane-5)

root是谓语(主要动词),nsubj表示主语,dobj表示直接宾语。

希望这可以帮助 :-)

于 2013-11-10T09:53:17.570 回答