我目前的理解是,可以使用OpenNLP,Stanford NLP等工具包从文本文档中提取实体。
但是,有没有办法在这些实体之间找到关系?
例如,请考虑以下文字:
“正如你们中的一些人所知道的那样,我上周去欧洲高能物理实验室欧洲核子研究中心(CERN),去年7月我发现着名的希格斯玻色子。我每次去欧洲核子研究中心时都感受到了深刻的感受。除了多年来的快速访问之外,我在20世纪90年代末作为访问科学家在那里工作了三个月,从事早期宇宙物理学工作,试图弄清楚如何将我们今天看到的宇宙与可能发生的事物联系起来。它的初期。“
实体:我(作者), CERN ,希格斯玻色子
关系: - 我“访问”CERN - CERN“发现”希格斯玻色子
感谢。
答案 0 :(得分:3)
例如,您可以使用Stanford Parser为其家属提取动词。例如,你可能会得到像
这样的“依赖链”"I :: spent :: at :: CERN".
认识到“我在欧洲核子研究中心度过”和“我访问欧洲核子研究中心”和“欧洲核子研究中心主持我的访问”(等)表示同样的事件是一项更艰巨的任务。如何做到这一点超出了SO问题的范围,但你可以阅读释义释义的文献(here是一篇概述论文)。 SO上还有一个related question。
一旦你可以聚类相似的链,你需要找到一种标记它们的方法。您只需选择群集中最常见链的动词即可。
但是,如果您想要提取一组预定义的关系类型,并为这些关系手动注释许多文本,那么该方法可能会有很大不同,例如,使用机器学习来学习如何识别基于注释数据的关系类型。
答案 1 :(得分:3)
不知道你是否仍然感兴趣但是CoreNLP添加了一个名为OpenIE(开放信息提取)的新注释器,它应该能够完成你正在寻找的东西。看看:OpenIE
答案 2 :(得分:1)
与斯坦福解析器类似,您也可以使用Google语言API,在其中发送字符串并获取依赖关系树响应。
您可以先测试此API,看看它是否适用于您的语料库:https://cloud.google.com/natural-language/
此处的结果是主题谓词对象(SPO)三元组,其中谓词描述了这种关系。您需要遍历依赖关系图并编写脚本来解析三元组。
答案 3 :(得分:1)
是的。这称为关系提取。斯坦福大学开发了一些有用的工具来解决这个问题。
有一个网站:http://deepdive.stanford.edu/relation_extraction 这是github存储库:https://github.com/philipperemy/Stanford-OpenIE-Python
通常,这是该过程的工作方式。
results = entract_entity_relations("Barack Obama was born in Hawaii.")
print(results)
# [['Barack Obama','was born in', 'Hawaii']]
至关重要的是,仅提取(subject,predicate,object)
形式的三元组。
答案 4 :(得分:0)
有许多方法可以进行关系提取。正如同事提到的那样,您必须了解NER和共指解析。不同的技术需要不同的方法。如今,远程监管最为普遍,为了检测实体之间的关系,他们使用了FREEBASE。