我想把一套英语句子转换成一组关系。 e.g。
“一名飞行员驾驶飞机。”将映射到以下关系:
flies(pilot, airplane)
“鲍勃是爱丽丝和道格的父亲。”将映射到
father(Bob, Alice)
father(Bob, Doug)
我知道我之前已经看过一个python库来做这样的事情,但是尽管我所有的搜索都无法找到它。我以前从未完成过NLP编程,所以我可能会错误地使用术语。道歉。
更新: 这不是生成Prolog的努力,而是生成关于一个话语世界的二元(和其他)事实。然后可以将这些事实插入到对象 - 角色模型中,并帮助生成数据库模式。上面的“苍蝇”事实只是为了说明,并且没有关于输出语法的要求。它只需要是常规输出。
在语言方面,我想我想看一个动词短语和两个名词短语来捕捉二元事实。这些结构的方式并不像能够以自动方式辨别结构那样重要。
答案 0 :(得分:1)
您似乎将自然语言转换为Prolog(XSB?)。通常,没有简单(甚至是相当困难)的方法来自动化该过程。但是,对于您问题中的简单句子,您需要使用类型依赖项解析。这将为您提供主语,宾语和动词。一旦你有了这些,你就可以编写一个简单的脚本来获取你的元组。
Python的自然语言工具包(NLTK)不支持类型依赖。 (见this answer
斯坦福大学的解析器将为您提供帮助(正如Prateek在评论中提到的那样)。请注意,您需要使用 typed 依赖项。
你的例句“飞行员驾驶飞机”。将产生
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
表示直接对象。
希望这会有所帮助: - )