やあ、
スタンフォードパーサーの例を実行しようとしています。 例えば
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クラスパスに追加して、解析が成功するようにするにはどうすればよいですか?
ありがとうございました!
幸せな休日
@yuvval念のため、Stanford Parserバージョン2015-12-09を使用していますか? その場合、このエラーは、新しいStanfordNLPが以前よりも多くの依存関係を使用しているために発生します。 これは#1237に似ています
#1237が修正され、NLTKがStandfordツールに追いつくまで、しばらく待つ必要があります。
クイックフィックスの解決策は、次のいずれかです。
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スクリプトを実行する場所に移動し、次のようにします: 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
最も参考になるコメント
コマンド「stanford_dir = st._stanford_jar.rpartition( '/')[0]」の「st」とは