Как использовать анализатор солода в python nltk

В рамках моего академического проекта мне нужно разобрать кучу произвольных предложений на граф зависимостей. После многого поиска я получил решение, которое я могу использовать солодовый парсер для разбора текста с его предварительно обученным грамматистом.

Я загрузил предварительно подготовленную модель (engmalt.linear-1.7.mco) с http://www.maltparser.org/mco/mco.html . BUt Я не знаю, как разбирать мои предложения, используя этот файл грамматики и анализатор солода (с помощью интерфейса python для солода). Я загрузил последнюю версию анализатора солода (1.7.2) и переместил его в '/ usr / lib /'

import nltk; parser =nltk.parse.malt.MaltParser() txt="This is a test sentence" parser.train_from_file('/home/rohith/malt-1.7.2/engmalt.linear-1.7.mco') parser.raw_parse(txt) 

после выполнения последней строки отправляется следующее сообщение об ошибке

 Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> parser.raw_parse(txt) File "/usr/local/lib/python2.7/dist-packages/nltk-2.0b5-py2.7.egg/nltk/parse/malt.py", line 88, in raw_parse return self.parse(words, verbose) File "/usr/local/lib/python2.7/dist-packages/nltk-2.0b5-py2.7.egg/nltk/parse/malt.py", line 75, in parse return self.tagged_parse(taggedwords, verbose) File "/usr/local/lib/python2.7/dist-packages/nltk-2.0b5-py2.7.egg/nltk/parse/malt.py", line 122, in tagged_parse return DependencyGraph.load(output_file) File "/usr/local/lib/python2.7/dist-packages/nltk-2.0b5-py2.7.egg/nltk/parse/dependencygraph.py", line 121, in load return DependencyGraph(open(file).read()) IOError: [Errno 2] No such file or directory: '/tmp/malt_output.conll' 

Пожалуйста, помогите мне разобрать это предложение, используя этот анализатор солода.

  • Глобальная обработка исключений Python
  • Сравнение кода Matlab и Numpy, в котором используется генерация случайных чисел
  • Использование Loop для добавления объектов в список (python)
  • Как найти каталог скриптов с Python?
  • Треугольник на расстоянии Python
  • Использование класса многопроцессорности Python.Process
  • Как проверить версию Django
  • Python - определение максимального значения во втором столбце вложенного списка
  • One Solution collect form web for “Как использовать анализатор солода в python nltk”

    отредактированный

    Обратите внимание, что ответ больше не работает из-за обновленной версии API MaltParser в NLTK с августа 2015 года. Этот ответ сохраняется ради цели.

    Пожалуйста, ознакомьтесь с этими ответами, чтобы получить MaltParser, работающий с NLTK:

    • Шаг за шагом, чтобы заставить солодовый парсер в NLTK работать?

    Отказ от ответственности : это не вечные решения. Ответ в приведенной выше ссылке (опубликовано в феврале 2016 г.) будет работать пока. Но когда API MaltParser или NLTK изменится, он также может изменить синтаксис на использование MaltParser в NLTK.


    Пара проблем с вашей настройкой:

    • Ввод в train_from_file должен быть файлом в формате CoNLL, а не предварительно подготовленной моделью. Для файла mco вы передаете его конструктору MaltParser с использованием параметров mco и mco .
    • Распределение кучи java по умолчанию недостаточно велико, чтобы загрузить этот конкретный файл mco , поэтому вам нужно будет сказать java, чтобы использовать больше кучи пространства с параметром -Xmx . К сожалению, это невозможно с существующим кодом, поэтому я только что проверил в изменении, чтобы разрешить дополнительные параметры конструктора для java args. См. Здесь .

    Итак, вот что вам нужно сделать:

    Во-первых, получите последнюю версию NLTK:

     git clone https://github.com/nltk/nltk.git 

    (ПРИМЕЧАНИЕ. Если вы не можете использовать git-версию NLTK, вам придется вручную обновить файл 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))' 
    Python - лучший язык программирования в мире.