Ошибка 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.
===========================================================================
это код exapmle:
>>> 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