Разрешение 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 работать:
-
в corenlp.py, измените путь к папке corenlp. Задайте путь, в котором локальная машина содержит папку corenlp, и добавьте путь в строку 144 из corenlp.py
if not corenlp_path: corenlp_path = <path to the corenlp file>
-
номер версии файла 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, которую вы загрузили.
-
выполнить команду:
python corenlp.py
начнется сервер
-
теперь запустите основную клиентскую программу
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 году."
код:
# 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/