2014-11-27 20 views
10

Tôi đang cố gắng sử dụng nltk.tag.stanford module cho gắn thẻ một câu (đầu tiên giống như ví dụ wiki của) nhưng tôi tiếp tục nhận được lỗi sau:NLTK stanford pos tagger lỗi: Java lệnh thất bại

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! 

hoặc sau LookupError lỗi:

LookupError: 

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

này là mã 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()) 

tôi cũng sử dụng word_tokenize thay vì split nhưng không có bất kỳ sự khác biệt nào.

Tôi cũng đã cài đặt lại java hoặc jdk! và tất cả các tìm kiếm của tôi đều không thành công! một cái gì đó như nltknltk.internals.config_java() hoặc ...!

Lưu ý: Tôi sử dụng linux (Xubuntu)!

Trả lời

7

Nếu bạn đọc qua tài liệu được nhúng trong số nltk/internals.py (dòng 58 - 175), bạn sẽ thấy câu trả lời của mình đủ dễ dàng. NLTK yêu cầu đường dẫn đầy đủ đến nhị phân Java.

If not specified, then nltk will search the system for a Java binary; and if one is not found, it will raise a LookupError exception.

Bạn có một vài lựa chọn Tôi tin dựa trên một chút nghiên cứu:

1) Thêm mã sau đây để dự án của bạn (không phải là một giải pháp tuyệt vời)

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

2) Gỡ cài đặt & Cài đặt lại NLTK (tốt nhất là trong một virtualenv) (tốt hơn nhưng vẫn không tuyệt vời)

pip uninstall nltk 
sudo -E pip install nltk 

3) Thiết lập các biến môi trường java (Đây là giải pháp thực tế nhất IMO)

Chỉnh sửa hệ thống tập tin đường dẫn/etc/profile

sudo gedit /etc/profile 

Thêm dòng cuối cùng

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

trong 'usr/lib/jvm /' tôi có 3 thư mục 'default-java' và' java-1.7.0-openjdak-amd64' và 'java-7-openjdk-amd64' whi ch một trong số họ tôi có thể sử dụng cho con đường? tôi sử dụng tất cả trong số họ nhưng tôi nhận được lỗi một lần nữa và thử tất cả các cách của bạn ngoại trừ 'uninstall' và' install' nltk! làm thế nào bạn nói tôi gỡ cài đặt và cài đặt lại? – Kasramvd

+0

@Kasra java-1.7.0-openjdak-amd64 Tôi tin rằng –

+0

một lần nữa trong viết lại mã trong một tệp '.py' mới và thực hiện nó, sau đó tôi nhận được lỗi này' print (stderr.decode (sys.stdout.encoding)) LoạiError: decode() đối số 1 phải là chuỗi, không phải None' bạn có quen thuộc không? của nó cho tập tin 'nltk/internals.py'! – Kasramvd

Các vấn đề liên quan