Stanford CoreNLP OpenIE anotador

Tengo una pregunta con respecto al anotador OpenIE de Stanford CoreNLP.

Estoy usando la versión Stanford CoreNLP stanford-corenlp-full-2015-12-09 para extraer relaciones usando OpenIE. No sé mucho de Java, por eso estoy usando el contenedor pycorenlp para Python 3.4.

Quiero extraer la relación entre todas las palabras de una oración, a continuación está el código que utilicé. También me interesa mostrar la confianza de cada triplete:

 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) 

Este es el resultado que obtuve:

 [[{'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]}]] 

Y los trillizos son:

 ('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') 

El primer problema es que la confianza no se muestra en el resultado. El segundo problema es que solo quiero recuperar el triplete que incluye todas las palabras de la oración, es decir, este triplete:

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

Lo que estoy obteniendo es más de una combinación de trillizos. Intenté usar la opción "triple.strict":"true" porque extrae “solo se triplica si consumen todo el fragmento” pero NO está funcionando.

¿Alguien puede aconsejarme sobre esto?

Deberías probar este ajuste:

 "openie.triple.strict":"true" 

Mirando a través del código que aparece en este momento, la confianza no se almacena con el json devuelto, por lo que no puede obtenerlo del servidor CoreNLP.

Ya que mencionas esto, presionaré un cambio que agregará esos a la salida json y te avisará cuando esté activo en GitHub.

Muchas gracias, está funcionando ahora que agregué: “openie.triple.strict”: “true” y “openie.max_entailments_per_clause”: “1” el código ahora es:

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