斯坦福CoreNLP OpenIE注释器

时间:2016-05-22 13:43:56

标签: python stanford-nlp

我对斯坦福CoreNLP OpenIE注释器有疑问。

我正在使用Stanford CoreNLP版本 stanford-corenlp-full-2015-12-09 ,以便使用OpenIE提取关系。我不太了解Java,这就是我使用Python 3.4的import nltk from pycorenlp import * import collections nlp=StanfordCoreNLP("http://localhost:9000/") s="Twenty percent electric motors are pulled from an assembly line" output = nlp.annotate(s, properties={"annotators":"tokenize,ssplit,pos,depparse,natlog,openie", "outputFormat": "json","triple.strict":"true"}) result = [output["sentences"][0]["openie"] for item in output] print(result) for i in result: for rel in i: relationSent=rel['relation'],rel['subject'],rel['object'] print(relationSent) 包装器的原因。

我想提取句子中所有单词之间的关系,下面是我使用的代码。我也有兴趣展示每个三胞胎的信心:

[[{'relationSpan': [4, 6], 'subject': 'Twenty percent electric motors', 'objectSpan': [8, 10], 'relation': 'are pulled from', 'object': 'assembly line', 'subjectSpan': [0, 4]}, {'relationSpan': [4, 6], 'subject': 'percent electric motors', 'objectSpan': [8, 10], 'relation': 'are pulled from', 'object': 'assembly line', 'subjectSpan': [1, 4]}, {'relationSpan': [4, 5], 'subject': 'Twenty percent electric motors', 'objectSpan': [5, 6], 'relation': 'are', 'object': 'pulled', 'subjectSpan': [0, 4]}, {'relationSpan': [4, 5], 'subject': 'percent electric motors', 'objectSpan': [5, 6], 'relation': 'are', 'object': 'pulled', 'subjectSpan': [1, 4]}]]

这是我得到的结果:

('are pulled from', 'Twenty percent electric motors', 'assembly line')
('are pulled from', 'percent electric motors', 'assembly line')
('are', 'Twenty percent electric motors', 'pulled')
('are', 'percent electric motors', 'pulled')

三胞胎是:

('are pulled from', 'Twenty percent electric motors', 'assembly line')

第一个问题是结果中没有表现出信心。第二个问题是我只想检索包含句子中所有单词的三元组,即这个三元组:

"triple.strict":"true"

我得到的不仅仅是三胞胎组合。我尝试使用选项{{1}},因为只有当它们消耗整个片段时它才会提取三倍"但它不起作用。

有人可以就此提出建议吗?

2 个答案:

答案 0 :(得分:5)

您应该尝试以下设置:

"openie.triple.strict":"true"

查看此时出现的代码,置信度不会与返回的json一起存储,因此您无法从CoreNLP服务器获取该信息。

由于你提出这个问题,我会推出一个更改,将这些更改添加到输出json中,并让你知道它何时在GitHub上运行。

答案 1 :(得分:2)

非常感谢,它现在正在运行我添加了两个:“openie.triple.strict”:“true”和“openie.max_entailments_per_clause”:“1”代码现在是:

output = nlp.annotate(chunkz, properties={"annotators":"tokenize,ssplit,pos,depparse,natlog,openie",
                                "outputFormat": "json",
                                 "openie.triple.strict":"true",
                                 "openie.max_entailments_per_clause":"1"})