2016-05-22 2 views
2

У меня есть вопрос относительно аннотатора Stanford CoreNLP OpenIE.Stanford CoreNLP аннотатор OpenIE

Я использую версию Stanford CoreNLP stanford-corenlp-full-2015-12-09, чтобы извлечь отношения с помощью OpenIE. Я не знаю много Java, поэтому я использую обертку pycorenlp для 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", потому что она извлекает «тройки, только если они потребляют весь фрагмент», но не работает.

Может кто-нибудь посоветует мне об этом?

ответ

3

Вы должны попробовать этот параметр:

"openie.triple.strict":"true" 

Просматривая код он появляется в это время доверие не хранится с возвращенным JSON, так что вы не можете получить, что с сервера CoreNLP.

Поскольку вы приносите это, я нажму изменение, которое добавит их на выход json и сообщит вам, когда это будет жить на GitHub.

+0

'openie .triple.strict = true' гарантирует, что сегментщик понимает все компоненты фрагмента своей сегментации. Я подозреваю, что у вас будет больше настроек удачи 'max_entailments_per_clause = 1' и' splitter.disable = true'. –

+1

StanfordNLPHelp Можете ли вы сказать, исправлено ли возвращение доверия с сервера в json? Спасибо –

2

Спасибо большое, он работает в настоящее время я добавил так: «openie.triple.strict»: «правда» и «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"}) 
+0

Эй, я думаю, вы должны добавить 'splitter.disable = true', как предложил Габор Анджели. Кроме того, как вам теперь удается получить оценки доверия? –

Смежные вопросы