Nltk: OSError:スタンフォードパーサーの例を使用するとJavaコマンドが失敗しました

作成日 2015年12月25日  ·  18コメント  ·  ソース: nltk/nltk

やあ、

スタンフォードパーサーの例を実行しようとしています。 例えば

from nltk.parse.stanford import * 
dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
[parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]

最後のコマンドを実行すると、エラーが発生します。

OSError: Java command failed : [u'/usr/bin/java', u'-mx1000m', '-cp', ....

コマンドラインで同じコマンドを再現すると、エラーException in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory発生します。

したがって、コマンドラインでクラスパスにslf4j-api.jarを追加すると、解析は成功します。

slf4j-api.jarをnltkクラスパスに追加して、解析が成功するようにするにはどうすればよいですか?

ありがとうございました!
幸せな休日

最も参考になるコメント

コマンド「stanford_dir = st._stanford_jar.rpartition( '/')[0]」の「st」とは

全てのコメント18件

@yuvval念のため、Stanford Parserバージョン2015-12-09を使用していますか? その場合、このエラーは、新しいStanfordNLPが以前よりも多くの依存関係を使用しているために発生します。 これは#1237に似ています

#1237が修正され、NLTKがStandfordツールに追いつくまで、しばらく待つ必要があります。

クイックフィックスの解決策は、次のいずれかです。

  1. http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zipの以前のバージョン2015-04-20を使用すると、NLTKAPIが機能しますください。 / questions / 13883277 / stanford-parser-and-nltk / 34112695#34112695または
  2. スタンフォードパーサーのクラスパスをハックします。
from nltk.internals import find_jars_within_path
from nltk.parse.stanford import StanfordDependencyParser
dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
stanford_dir = st._stanford_jar.rpartition('/')[0]
# or in windows comment the line above and uncomment the one below:
#stanford_dir = st._stanford_jar.rpartition("\\")[0]
stanford_jars = find_jars_within_path(stanford_dir)
st.stanford_jar = ':'.join(stanford_jars)
[parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]

ありがとうございました! 2015-04-20バージョンで動作します。

クラスパスハックも機能しましたか?

私は試しませんでした-私は最新バージョンを削除し、2015-04-20バージョンをダウンロードしました。

やあ! 私はあなたのハックを追跡しようとしましたが、私には `StanfordDependencyParser``はありません:

print(nltk.__version__)
from nltk.tag import StanfordDependencyParser

3.1
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-7-67bb74c3494a> in <module>()
----> 1 from nltk.tag import StanfordDependencyParser

ImportError: cannot import name 'StanfordDependencyParser'

これを解決する方法はありますか? 本当に最新のスタンフォードバージョンを使いたいです。

@methodds私のタイプミスをfrom nltk.parse.stanford import StanfordDependencyParserです。 詳細な説明については、 https://gist.github.com/alvations/e1df0ba227e542955a8aを参照して

リンクありがとうございます。 残念ながら、Linux MintOSで環境変数を機能させることができません。

私のbashrcは次のようになります。

export JAVA_HOME="/usr/lib/jvm/java-8-oracle/"
export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH="/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$CLASSPATH"

export CLASSPATH="/home/cs/stanford_nlp/stanford-ner-2015-04-20/stanford-ner.jar:$CLASSPATH"

export STANFORD_MODELS="/home/cs/stanford_nlp/stanford-ner-2015-04-20/classifiers:$STANFORD_MODELS"

export STANFORD_MODELS="/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/models:$STANFORD_MODELS"

変数のエコーは正しく見えます:

echo $CLASSPATH
/home/cs/stanford_nlp/stanford-ner-2015-04-20/stanford-ner.jar:/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/stanford-postagger.jar

echo $STANFORD_MODELS
/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/models:/home/cs/stanford_nlp/stanford-ner-2015-04-20/classifiers

ただし、(再起動した後でも)NLTKはまだタガーを見つけられません。

from nltk.tag.stanford import StanfordPOSTagger
st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
st.tag('What is the airspeed of an unladen swallow ?'.split())

NLTK was unable to find stanford-postagger.jar! Set the CLASSPATH
environment variable.

source .bashrcを実行すると、動作します。その間、 http: //apple.stackexchange.com/questions/12993/why-doesnt-bashrc-run-automaticallyを参照して、bashrcの動作を確認して

ヒントをありがとうございますが、事前に.bashrcをソースにしたので、機能しませんでした。 もう一度試してみましたが、残念ながらまだ機能していません。

Linuxのディストリビューションとバージョンは何ですか? lsb_release -aできますか? それともMacで作業していますか?

調査していただきありがとうございます。 ` lsb_release -aは戻ります

No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 17.3 Rosa
Release:    17.3
Codename:   rosa
  • exportコマンドはどこで行いましたか? どのディレクトリ?
  • Pythonスクリプトをどこで実行していますか? どのディレクトリ?

Pythonスクリプトを実行する場所に移動し、次のようにします: import os; print os.environ

次に、ホームディレクトリに移動し、Pythonを起動して、同じことを行います。 import os; print os.environ

2セットの環境変数が異なると思いますか?

import os; print(os.environ)を使用してほしいと思っていたと思いますが、 .bashrcエクスポートした環境変数は表示されません.profile (ホームフォルダー内)に貼り付けたところ、完全に機能するようになりました。 = Dなのに、なぜかわかりません。

.profile機能することをうれしく思います。これは、OSディストリビューションの問題だと思います。 個人的には、環境変数を静的として保存することはお勧めしません。Pythonスクリプトを起動するたびに再実行して、競合がないことを確認します。 NLTK APIとスタンフォードツールを楽しんでください!

ありがとうございました :)

コマンド「stanford_dir = st._stanford_jar.rpartition( '/')[0]」の「st」とは

hansen7と同じ質問があります

stとは何かを探している少数の人のために、
st = StanfordNERTagger(os.environ.get('STANFORD_MODELS'))
参照: https ://gist.github.com/manashmndl/810db10809cbc1209b34c7d25efe95d5#file -stanfordnertagger-py

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

talbaumel picture talbaumel  ·  4コメント

stevenbird picture stevenbird  ·  3コメント

alvations picture alvations  ·  4コメント

ndvbd picture ndvbd  ·  4コメント

alvations picture alvations  ·  4コメント