Resolución de referencia en Python nltk utilizando Stanford coreNLP

Stanford CoreNLP proporciona una resolución de referencia central como se menciona aquí , también este hilo , esto , proporciona algunas ideas sobre su implementación en Java.

Sin embargo, estoy usando python y NLTK y no estoy seguro de cómo puedo usar la funcionalidad de resolución Coreference de CoreNLP en mi código de python. He podido configurar StanfordParser en NLTK, este es mi código hasta ahora.

from nltk.parse.stanford import StanfordDependencyParser stanford_parser_dir = 'stanford-parser/' eng_model_path = stanford_parser_dir + "stanford-parser-models/edu/stanford/nlp/models/lexparser/englishRNN.ser.gz" my_path_to_models_jar = stanford_parser_dir + "stanford-parser-3.5.2-models.jar" my_path_to_jar = stanford_parser_dir + "stanford-parser.jar" 

¿Cómo puedo usar la resolución de referencia de CoreNLP en python?

Como lo mencionó @Igor, puede probar el envoltorio python implementado en este repository de GitHub: https://github.com/dasmith/stanford-corenlp-python

Este repository contiene dos archivos principales: corenlp.py client.py

Realice los siguientes cambios para que CoreNLP funcione:

  1. En corenlp.py, cambie la ruta de la carpeta corenlp. Establezca la ruta donde su máquina local contiene la carpeta corenlp y agregue la ruta en la línea 144 de corenlp.py

    if not corenlp_path: corenlp_path =

  2. El número de versión del archivo jar en “corenlp.py” es diferente. Ajústelo según la versión de corenlp que tenga. Cámbiala en la línea 135 de corenlp.py

    jars = ["stanford-corenlp-3.4.1.jar", "stanford-corenlp-3.4.1-models.jar", "joda-time.jar", "xom.jar", "jollyday.jar"]

En este reemplaza 3.4.1 con la versión jar que has descargado.

  1. Ejecuta el comando:

    python corenlp.py

Esto iniciará un servidor.

  1. Ahora ejecuta el progtwig cliente principal

    python client.py

Esto proporciona un diccionario y puede acceder a coref usando ‘coref’ como clave:

Por ejemplo: John es un informático. Le gusta la encoding.

 { "coref": [[[["a Computer Scientist", 0, 4, 2, 5], ["John", 0, 0, 0, 1]], [["He", 1, 0, 0, 1], ["John", 0, 0, 0, 1]]]] } 

He intentado esto en Ubuntu 16.04. Usa la versión 7 u 8 de java.

stanfordcorenlp , la envoltura relativamente nueva, puede funcionar para usted.

Supongamos que el texto es ” Barack Obama nació en Hawai. Él es el presidente. Obama fue elegido en 2008 “.

introduzca la descripción de la imagen aquí

El código:

 # coding=utf-8 import json from stanfordcorenlp import StanfordCoreNLP nlp = StanfordCoreNLP(r'G:\JavaLibraries\stanford-corenlp-full-2017-06-09', quiet=False) props = {'annotators': 'coref', 'pipelineLanguage': 'en'} text = 'Barack Obama was born in Hawaii. He is the president. Obama was elected in 2008.' result = json.loads(nlp.annotate(text, properties=props)) num, mentions = result['corefs'].items()[0] for mention in mentions: print(mention) 

Cada “mención” de arriba es un dictado de Python como este:

 { "id": 0, "text": "Barack Obama", "type": "PROPER", "number": "SINGULAR", "gender": "MALE", "animacy": "ANIMATE", "startIndex": 1, "endIndex": 3, "headIndex": 2, "sentNum": 1, "position": [ 1, 1 ], "isRepresentativeMention": true } 

Tal vez esto funcione para usted? https://github.com/dasmith/stanford-corenlp-python Si no es así, puede intentar combinar los dos utilizando http://www.jython.org/