2014-11-27 5 views
10

मैं एक वाक्य (प्रथम विकि के उदाहरण की तरह) टैगिंग के लिए nltk.tag.stanford module उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं निम्नलिखित त्रुटि प्राप्त हो रही:Nltk स्टैनफोर्ड स्थिति टैगर त्रुटि: जावा आदेश में विफल रहा है

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 त्रुटि:

>>> 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()) 

मैं भीका प्रयोग किया:

LookupError: 

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

exapmle कोड हैइसके बजाय split लेकिन इससे कोई फर्क नहीं पड़ता।

मैंने जावा को फिर से स्थापित किया या jdk! और मेरी सभी खोज असफल रही! कुछ nltknltk.internals.config_java() या ... की तरह कुछ!

नोट: मैं लिनक्स (जुबंटू) का उपयोग करता हूं!

उत्तर

7

यदि आप nltk/internals.py (रेखा 58 - 175) में एम्बेडेड दस्तावेज़ों के माध्यम से पढ़ते हैं तो आपको अपना उत्तर इतना आसान मिलना चाहिए। एनएलटीके को जावा बाइनरी के लिए पूर्ण पथ की आवश्यकता है। (नहीं एक महान समाधान)

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

1) अपनी परियोजना के लिए निम्न कोड जोड़ें:

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.

आप मैं अनुसंधान के एक बिट के आधार पर मानना ​​है कि विकल्पों में से एक जोड़ी 2) अनइंस्टॉल करें & एनएलटीके को पुनर्स्थापित करें (अधिमानतः virtualenv में) (बेहतर लेकिन अभी भी बहुत अच्छा नहीं)

pip uninstall nltk 
sudo -E pip install nltk 

3) सेट जावा वातावरण चर (यह सबसे व्यावहारिक समाधान IMO)

संपादित प्रणाली पथ फ़ाइल/etc/प्रोफ़ाइल

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 
+0

'usr/lib/jvm /' में मेरे पास 3 निर्देशिका 'डिफ़ॉल्ट-जावा' और 'जावा-1.7.0-openjdak-amd64' और' जावा -7-openjdk-amd64' whi है उनमें से एक मैं पथ के लिए उपयोग कर सकते हैं? मैं उन सभी का उपयोग करता हूं लेकिन मुझे फिर से त्रुटि मिलती है और 'अनइंस्टॉल करें' और 'इंस्टॉल' एनएलटीके को छोड़कर अपने सभी तरीके से प्रयास करें! आप कैसे कहते हैं मैं अनइंस्टॉल और फिर से स्थापित करें? – Kasramvd

+0

@ कासर जावा-1.7.0-openjdak-amd64 मेरा मानना ​​है कि –

+0

फिर से एक नई '.py' फ़ाइल में कोड को फिर से लिखने और इसे निष्पादित करने में विश्वास करता है, तो मुझे यह त्रुटि 'प्रिंट (stderr.decode (sys.stdout.encoding) मिलती है।) टाइप एरर: डीकोड() तर्क 1 स्ट्रिंग होना चाहिए, कोई नहीं 'क्या आप परिचित हैं? इसके लिए 'nltk/internals.py' फ़ाइल के लिए! – Kasramvd

संबंधित मुद्दे