NLTK Stanford Pos Tagger ошибка: команда Java не удалось

Я пытаюсь использовать nltk.tag.stanford module для пометки предложения (сначала как пример вики), но я продолжаю получать следующую ошибку:

Traceback (most recent call last):
  File "test.py", line 28, in <module>
    print st.tag(word_tokenize('What is the airspeed of an unladen swallow ?'))
  File "/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py", line 59, in tag
    return self.tag_sents([tokens])[0]
  File "/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py", line 81, in tag_sents
    stdout=PIPE, stderr=PIPE)
  File "/usr/local/lib/python2.7/dist-packages/nltk/internals.py", line 160, in java
    raise OSError('Java command failed!')
OSError: Java command failed!

или после LookupError ошибка:

LookupError: 

===========================================================================
NLTK was unable to find the java file!
Use software specific configuration paramaters or set the JAVAHOME environment variable.
===========================================================================

это пример кода:

>>> from nltk.tag.stanford import POSTagger
>>> st = POSTagger('/usr/share/stanford-postagger/models/english-bidirectional-distsim.tagger',
...                '/usr/share/stanford-postagger/stanford-postagger.jar') 
>>> st.tag('What is the airspeed of an unladen swallow ?'.split()) 

Я также использовал word_tokenize вместо split но это не имеет никакого значения.

Я также снова установил Java или jdk! и все мои поиски не увенчались успехом! что-то вроде nltknltk.internals.config_java() или же...!

Примечание: я использую Linux (Xubuntu)!

1 ответ

Если вы прочитали встроенную документацию в файле nltk / internals.py (строки 58–175), вы должны найти свой ответ достаточно легко. NLTK требует полного пути к двоичному файлу Java.

Если не указано, то nltk будет искать в системе двоичный файл Java; и если он не найден, он вызовет исключение LookupError.

Я полагаю, у вас есть несколько вариантов, основанных на небольшом исследовании:

1) Добавьте следующий код в ваш проект (не очень хорошее решение)

import os
java_path = "path/to/java" # replace this
os.environ['JAVAHOME'] = java_path

2) Удалите и переустановите NLTK (желательно в virtualenv) (лучше, но не очень хорошо)

pip uninstall nltk
sudo -E pip install nltk

3) Установите переменную среды Java (это самое прагматичное решение IMO)

Отредактируйте системный путь к файлу /etc/profile

sudo gedit /etc/profile

Добавьте следующие строки в конец

JAVA_HOME=/usr/lib/jvm/jdk1.7.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

Я также столкнулся с этой проблемой при первом использовании NLTK. После нескольких часов, проведенных с этой проблемой, мне наконец удалось заставить ее работать.

Вот что я сделал:

  1. Удалите и переустановите пакет nltk
  2. Добавьте как JAVAHOME а также JAVA_HOME переменные окружения переменные (в моем случае C:\Program Files\Java\jdk1.8.0_241\bin\)
  3. Добавьте значения (C:\Program Files\Java\jdk1.8.0_241\bin\) к Path также переменная окружения.

И, естественно, перезапустите Терминал.

Это сработало для меня в 64-разрядной версии Windows 7.

Другие вопросы по тегам