Разрешение Coreference в python nltk с использованием Stanford coreNLP

Стэнфорд CoreNLP обеспечивает разрешение coreference Как уже упоминалось здесь, и этой теме, этой, предоставляет некоторые сведения о его реализации в Java.

однако я использую python и NLTK, и я не уверен, как я могу использовать функциональность разрешения Coreference CoreNLP в моем коде python. Я смог настроить StanfordParser в NLTK, это мой код до сих пор.

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"

Как я могу использовать coreference разрешение CoreNLP в python?

3 ответов


как упоминалось @Igor, вы можете попробовать оболочку python, реализованную в этом репозитории GitHub:https://github.com/dasmith/stanford-corenlp-python

это РЕПО содержит два основных файла: corenlp.py client.py

выполните следующие изменения, чтобы заставить coreNLP работать:

  1. в corenlp.py, измените путь к папке corenlp. Задайте путь, в котором локальная машина содержит папку corenlp, и добавьте путь в строку 144 из corenlp.py

    if not corenlp_path: corenlp_path = <path to the corenlp file>

  2. номер версии файла jar в "corenlp.py-это другое. Установите его в соответствии с версией corenlp, которая у вас есть. Измените его на строке 135 corenlp.py

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

в этом замените 3.4.1 на версию jar, которую вы загрузили.

  1. выполнить команду:

    python corenlp.py

начнется сервер

  1. теперь запустите основную клиентскую программу

    python client.py

Это предоставляет словарь, и вы можете получить доступ к coref, используя "coref" в качестве ключа:

например: Джон-компьютерщик. Ему нравится кодирование.

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

Я пробовал это на Ubuntu 16.04. Используйте java версии 7 или 8.


stanfordcorenlp, относительно новая обертка, может работать для вас.

предположим, текст "Барак Обама родился на Гавайях. Он президент. Обама был избран в 2008 году."

enter image description here

код:

# 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)

каждое "упоминание" выше - это Python dict, как это:

{
  "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
}

может быть, это работает для вас? https://github.com/dasmith/stanford-corenlp-python Если нет, можно попробовать совместить себя с помощью http://www.jython.org/