Ответ 1
Edited
Обратите внимание, что ответ больше не работает из-за обновленной версии API MaltParser в NLTK с августа 2015 года. Этот ответ сохранен ради цели.
Пожалуйста, ознакомьтесь с этими ответами, чтобы заставить MaltParser работать с NLTK:
Отказ от ответственности. Это не вечные решения. Ответ в приведенной выше ссылке (опубликовано в феврале 2016 г.) будет работать пока. Но когда MaltParser или NLTK API меняются, он также может изменить синтаксис на использование MaltParser в NLTK.
Пара проблем с вашей настройкой:
- Вход в
train_from_file
должен быть файлом в формате CoNLL, а не предварительно подготовленной моделью. Для файлаmco
вы передаете его конструкторуMaltParser
, используя параметрыmco
иworking_directory
. - Распределение кучи java по умолчанию недостаточно велико, чтобы загрузить этот конкретный файл
mco
, поэтому вам нужно будет указать java для использования большего количества кучи с параметром-Xmx
. К сожалению, это невозможно с существующим кодом, поэтому я только что проверил в изменении, чтобы разрешить дополнительные параметры конструктора для java args. См. здесь.
Итак, вот что вам нужно сделать:
Сначала получите последнюю версию NLTK:
git clone https://github.com/nltk/nltk.git
(ПРИМЕЧАНИЕ. Если вы не можете использовать версию NLTK git, вам придется вручную обновить файл malt.py
или скопировать его из здесь, чтобы иметь собственную версию.)
Во-вторых, переименуйте файл jar в malt.jar
, что ожидает NLTK:
cd /usr/lib/
ln -s maltparser-1.7.2.jar malt.jar
Затем добавьте переменную окружения, указывающую на синтаксический анализатор солода:
export MALTPARSERHOME="/Users/dhg/Downloads/maltparser-1.7.2"
Наконец, загрузите и используйте анализатор солода в python:
>>> import nltk
>>> parser = nltk.parse.malt.MaltParser(working_dir="/home/rohith/malt-1.7.2",
... mco="engmalt.linear-1.7",
... additional_java_args=['-Xmx512m'])
>>> txt = "This is a test sentence"
>>> graph = parser.raw_parse(txt)
>>> graph.tree().pprint()
'(This (sentence is a test))'