93

NLTK でスタンフォード パーサーを使用することは可能ですか? (スタンフォード POS について話しているわけではありません。)

4

18 に答える 18

78

非推奨の回答

以下の回答は非推奨です。NLTK v3.3以降については、 https: //stackoverflow.com/a/51981566/610569 のソリューションを使用してください。


編集済み

注: 次の回答は、次の場合にのみ機能します。

  • NLTK バージョン >=3.2.4
  • 2015 年 4 月 20 日以降にコンパイルされたスタンフォード ツール
  • Python 2.7、3.4、および 3.5 (Python 3.6 はまだ正式にサポートされていません)

どちらのツールも急速に変化するため、API は 3 ~ 6 か月後に非常に異なって見える可能性があります。次の回答は一時的なものであり、永遠の修正ではありません。

NLTK を使用してスタンフォード NLP ツールに接続する方法に関する最新の手順については、常にhttps://github.com/nltk/nltk/wiki/Installing-Third-Party-Softwareを参照してください!!


TL;DR

cd $HOME

# Update / Install NLTK
pip install -U nltk

# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip 
unzip stanford-parser-full-2015-04-20.zip 
unzip stanford-postagger-full-2015-04-20.zip


export STANFORDTOOLSDIR=$HOME

export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar

export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers

それで:

>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]

>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]


>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]

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

長文:


まず、スタンフォード NLP ツールは Javaで作成され、 NLTK は Python で作成されていることに注意してください。NLTK がツールに接続する方法は、コマンド ライン インターフェイスを介して Java ツールを呼び出すことです。

次にNLTKスタンフォード NLP ツールの API はバージョン 3.1 から大幅に変更されました。そのため、NLTK パッケージを v3.1 に更新することをお勧めします。

第三に、Stanford NLP Tools へのAPI は、 Stanford POS taggerStanford NER TaggerStanford ParserNLTKなどの個々の NLP ツールをラップします。

POS および NER タガーの場合、 Stanford Core NLP パッケージをラップすることはありません

スタンフォード パーサーの場合、スタンフォード パーサーとスタンフォード コア NLP の両方をラップする特殊なケースです (個人的には、NLTK を使用して後者を使用したことはありません。http://www.eecs. qmul.ac.uk/~dm303/stanford-dependency-parser-nltk-and-anaconda.html )

NLTK v3.1 の時点で、STANFORD_JARandSTANFORD_PARSER変数は廃止され、今後は使用されないことに注意してください。


より長く:


ステップ1

OSにJavaが適切にインストールされていると仮定します。

次に、NLTK バージョンをインストール/更新します ( http://www.nltk.org/install.htmlを参照)。

  • ピップの使用:sudo pip install -U nltk
  • Debian ディストリビューション(apt-get を使用):sudo apt-get install python-nltk

Windowsの場合 (32 ビット バイナリ インストールを使用):

  1. Python 3.4 をインストールします: http://www.python.org/downloads/ (64 ビット バージョンは避けてください)
  2. Numpy をインストールします (オプション): http://sourceforge.net/projects/numpy/files/NumPy/ (pythnon3.4 を指定するバージョン)
  3. NLTK をインストールします: http://pypi.python.org/pypi/nltk
  4. インストールのテスト: Start>Python34、次に import nltk と入力

(なぜ 64 ビットではないのですか? https://github.com/nltk/nltk/issues/1079を参照してください)


次に、パラノイアから、nltkPython 内のバージョンを再確認します。

from __future__ import print_function
import nltk
print(nltk.__version__)

またはコマンドラインで:

python3 -c "import nltk; print(nltk.__version__)"

3.1出力として表示されることを確認してください。

さらにパラノイアについては、お気に入りのスタンフォード NLP ツール API がすべて利用可能であることを確認してください。

from nltk.parse.stanford import StanfordParser
from nltk.parse.stanford import StanfordDependencyParser
from nltk.parse.stanford import StanfordNeuralDependencyParser
from nltk.tag.stanford import StanfordPOSTagger, StanfordNERTagger
from nltk.tokenize.stanford import StanfordTokenizer

(: 上記のインポートは、これらの API を含む正しい NLTK バージョンを使用していることのみを保証します。インポートでエラーが表示されないからといって、Stanford Tools を使用するように NLTK API が正常に構成されているわけではありません)


ステップ2

これで、必要なスタンフォード NLP ツール インターフェイスを含む正しいバージョンの NLTK があることを確認できました。必要なすべてのスタンフォード NLP ツールをダウンロードして抽出する必要があります。

TL;DR、Unix の場合:

cd $HOME

# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip 
unzip stanford-parser-full-2015-04-20.zip 
unzip stanford-postagger-full-2015-04-20.zip

Windows / Mac の場合:


ステップ3

NLTK が関連するファイル パスを自動的に検出できるように、環境変数を設定します。次の変数を設定する必要があります。

  • 適切なスタンフォード NLP.jarファイルを CLASSPATH環境変数に追加します。

    • たとえば、NER の場合は次のようになります。stanford-ner-2015-04-20/stanford-ner.jar
    • たとえば、POS の場合は次のようになります。stanford-postagger-full-2015-04-20/stanford-postagger.jar
    • たとえば、パーサーの場合はstanford-parser-full-2015-04-20/stanford-parser.jar、パーサー モデルの jar ファイル、stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
  • 適切なモデル ディレクトリを変数に追加しSTANFORD_MODELSます (つまり、事前トレーニング済みのモデルが保存されている場所を見つけることができるディレクトリ)。

    • たとえば、NER の場合は次のようになります。stanford-ner-2015-04-20/classifiers/
    • たとえば、POS の場合はstanford-postagger-full-2015-04-20/models/
    • たとえば、パーサーの場合、モデル ディレクトリはありません。

STANFORD_MODELSコードでは、モデル名を追加する前にディレクトリを検索することを確認してください。また、API は OS 環境で`CLASSPATHを自動的に検索しようとします) 。

NLTK v3.1 の時点で、STANFORD_JAR変数は非推奨であり、もはや使用されていないことに注意してください。次の Stackoverflow の質問にあるコード スニペットは機能しない可能性があります。

TL;DR Ubuntu での STEP 3 の場合

export STANFORDTOOLSDIR=/home/path/to/stanford/tools/

export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar

export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers

( Windowsの場合:環境変数の設定手順については、https ://stackoverflow.com/a/17176423/610569 を参照してください)

Python を開始する前に、上記のように変数を設定する必要があります。

>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]

>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]


>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]

または、以前の回答が示唆しているように、python 内に環境変数を追加してみることができますが、.jarファイルとモデルを保持した直接パスに初期化するようにパーサー/タガーに直接指示することもできます。

次の方法を使用する場合、環境変数を設定する必要はありませんが、 APIがそのパラメーター名を変更するときに、それに応じて変更する必要があります。そのため、Python コードを NLTK のバージョンに合わせて変更するよりも、環境変数を設定する方が賢明です。

例(環境変数を設定せずに):

# POS tagging:

from nltk.tag import StanfordPOSTagger

stanford_pos_dir = '/home/alvas/stanford-postagger-full-2015-04-20/'
eng_model_filename= stanford_pos_dir + 'models/english-left3words-distsim.tagger'
my_path_to_jar= stanford_pos_dir + 'stanford-postagger.jar'

st = StanfordPOSTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar) 
st.tag('What is the airspeed of an unladen swallow ?'.split())


# NER Tagging:
from nltk.tag import StanfordNERTagger

stanford_ner_dir = '/home/alvas/stanford-ner/'
eng_model_filename= stanford_ner_dir + 'classifiers/english.all.3class.distsim.crf.ser.gz'
my_path_to_jar= stanford_ner_dir + 'stanford-ner.jar'

st = StanfordNERTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar) 
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())

# Parsing:
from nltk.parse.stanford import StanfordParser

stanford_parser_dir = '/home/alvas/stanford-parser/'
eng_model_path = stanford_parser_dir  + "edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir  + "stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir  + "stanford-parser.jar"

parser=StanfordParser(model_path=eng_model_path, path_to_models_jar=my_path_to_models_jar, path_to_jar=my_path_to_jar)
于 2015-12-06T00:45:28.640 に答える
23

非推奨の回答

以下の回答は非推奨です。NLTK v3.3以降については、 https: //stackoverflow.com/a/51981566/610569 のソリューションを使用してください。


編集済み

現在のスタンフォード パーサー (2015-04-20) の時点で、 のデフォルト出力lexparser.shが変更されたため、以下のスクリプトは機能しません。

ただし、この回答はレガシーのために保持されていますが、http://nlp.stanford.edu/software/stanford-parser-2012-11-12.zipでも引き続き機能します。


元の回答

Jython や JPype をいじらないことをお勧めします。Python に Python を実行させ、Java に Java を実行させて、コンソールからスタンフォード パーサーの出力を取得します。

スタンフォード パーサーをホーム ディレクトリにインストールし~/たら、次の python レシピを使用して、フラット ブラケット付きの解析を取得します。

import os
sentence = "this is a foo bar i want to parse."

os.popen("echo '"+sentence+"' > ~/stanfordtemp.txt")
parser_out = os.popen("~/stanford-parser-2012-11-12/lexparser.sh ~/stanfordtemp.txt").readlines()

bracketed_parse = " ".join( [i.strip() for i in parser_out if i.strip()[0] == "("] )
print bracketed_parse
于 2013-01-17T09:58:37.843 に答える
7

Stanford Core NLP ソフトウェア ページには、python ラッパーのリストがあります。

http://nlp.stanford.edu/software/corenlp.shtml#Extensions

于 2013-08-21T19:28:10.540 に答える
7

スタンフォードパーサー用のpythonインターフェースがあります

http://projects.csail.mit.edu/spatial/Stanford_Parser

于 2012-12-18T18:16:21.007 に答える
6

よく覚えていると思いますが、スタンフォード パーサーは Java ライブラリであるため、サーバー/コンピューターで Java インタープリターを実行する必要があります。

PHPスクリプトと組み合わせて、サーバーとして一度使用しました。このスクリプトは、php の exec() 関数を使用して、次のようにパーサーへのコマンドライン呼び出しを行いました。

<?php

exec( "java -cp /pathTo/stanford-parser.jar -mx100m edu.stanford.nlp.process.DocumentPreprocessor /pathTo/fileToParse > /pathTo/resultFile 2>/dev/null" );

?>

このコマンドの詳細をすべて覚えているわけではありません。基本的には、fileToParse を開いて解析し、結果ファイルに出力を書き込みました。その後、PHP は、さらに使用するために結果ファイルを開きます。

コマンドの最後で、パーサーの詳細を NULL に設定して、不要なコマンド ライン情報がスクリプトを妨害するのを防ぎます。

Python についてはよくわかりませんが、コマンド ライン呼び出しを行う方法があるかもしれません。

あなたが望んでいた通りのルートではないかもしれませんが、インスピレーションを与えてくれることを願っています。幸運を祈ります。

于 2012-12-14T17:25:37.610 に答える
4

この回答は NLTK v 3.0 に適用され、最近のバージョンには適用されないことに注意してください。

誰も実際に言及しておらず、どういうわけか私を悩ませているので、Pythonでスタンフォードパーサーを使用する別の方法を次に示します。

stanford_parser_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser.jar'
stanford_model_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar'    
parser = StanfordParser(path_to_jar=stanford_parser_jar, 
                        path_to_models_jar=stanford_model_jar)

このようにして、もうパスのことを心配する必要はありません。

Ubuntu で適切に使用できない、または Eclipse でコードを実行できない人向け。

于 2016-04-08T16:41:39.210 に答える
3

この回答は NLTK v 3.0 に適用され、最近のバージョンには適用されないことに注意してください。

これがalvasの答えのWindows版です

sentences = ('. '.join(['this is sentence one without a period','this is another foo bar sentence '])+'.').encode('ascii',errors = 'ignore')
catpath =r"YOUR CURRENT FILE PATH"

f = open('stanfordtemp.txt','w')
f.write(sentences)
f.close()

parse_out = os.popen(catpath+r"\nlp_tools\stanford-parser-2010-08-20\lexparser.bat "+catpath+r"\stanfordtemp.txt").readlines()

bracketed_parse = " ".join( [i.strip() for i in parse_out if i.strip() if i.strip()[0] == "("] )
bracketed_parse = "\n(ROOT".join(bracketed_parse.split(" (ROOT")).split('\n')
aa = map(lambda x :ParentedTree.fromstring(x),bracketed_parse)

ノート:

  • lexparser.bat 「クラスが見つかりません」などの Java エラーを回避するために、すべてのパスを絶対パスに変更する必要があります。

  • ページでいくつかの回答を試しましたが、すべてのメソッドが Python と Java で通信するのに失敗したため、このメソッドを Windows に適用することを強くお勧めします。

  • Windows で成功した場合は、ご連絡をお待ちしております。また、これらすべての問題をどのように克服したか教えていただければ幸いです。

  • python バージョンを取得するために stanford coreNLP の python ラッパーを検索します


于 2014-12-11T03:46:27.080 に答える
3

私はWindowsマシンを使用していますが、コマンドのようにパーサーを通常どおり実行できますが、別のディレクトリと同じように実行できるため、lexparser.batファイルを編集する必要はありません。フルパスを入れるだけです。

cmd = r'java -cp \Documents\stanford_nlp\stanford-parser-full-2015-01-30 edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat "typedDependencies" \Documents\stanford_nlp\stanford-parser-full-2015-01-30\stanford-parser-3.5.1-models\edu\stanford\nlp\models\lexparser\englishFactored.ser.gz stanfordtemp.txt'
parse_out = os.popen(cmd).readlines()

私にとってトリッキーな部分は、別のパスから Java プログラムを実行する方法を理解することでした。より良い方法があるはずですが、これはうまくいきます。

于 2015-03-06T16:30:57.210 に答える
3

この回答は NLTK v 3.0 に適用され、最近のバージョンには適用されないことに注意してください。

NLTK と Python でスタンフォード パーサーを使用することに関する、danger89 の包括的な回答のわずかな更新 (または単に代替)

stanford-parser-full-2015-04-20、JRE 1.8、および nltk 3.0.4 (python 2.7.6) では、stanford-parser-xxx-models から englishPCFG.ser.gz を抽出する必要がなくなったようです。 .jar または os.environ の設定

from nltk.parse.stanford import StanfordParser

english_parser = StanfordParser('path/stanford-parser.jar', 'path/stanford-parser-3.5.2-models.jar')

s = "The real voyage of discovery consists not in seeking new landscapes, but in having new eyes."

sentences = english_parser.raw_parse_sents((s,))
print sentences #only print <listiterator object> for this version

#draw the tree
for line in sentences:
    for sentence in line:
        sentence.draw()
于 2015-08-28T10:31:03.000 に答える
2

何時間もかけて、やっと Windows ユーザー向けの簡単な解決策を見つけました。基本的に、alvas による既存の回答の要約版ですが、スタンフォード NLP を初めて使用し、Windows ユーザーである人にとっては (うまくいけば) 従うのが簡単になります。

1) NER、POS など、使用するモジュールをダウンロードします。私の場合、NER を使用したかったので、http://nlp.stanford.edu/software/stanford-ner-2015-からモジュールをダウンロードしました。 04-20.zip

2)ファイルを解凍します。

3)解凍したフォルダーから環境変数 (classpath と stanford_modules) を設定します。

import os
os.environ['CLASSPATH'] = "C:/Users/Downloads/stanford-ner-2015-04-20/stanford-ner.jar"
os.environ['STANFORD_MODELS'] = "C:/Users/Downloads/stanford-ner-2015-04-20/classifiers/"

4) JAVA をインストールした場所と同様に、JAVA の環境変数を設定します。私の場合は下でした

os.environ['JAVAHOME'] = "C:/Program Files/Java/jdk1.8.0_102/bin/java.exe"

5)必要なモジュールをインポートします

from nltk.tag import StanfordNERTagger

6)解凍したフォルダーの分類子フォルダーにある事前トレーニング済みモデルを呼び出します。ファイル拡張子の末尾に「.gz」を追加します。私にとって、私が使いたかったモデルはenglish.all.3class.distsim.crf.ser

st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')

7)パーサーを実行します!! そして完成です!!

st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
于 2016-12-16T09:20:48.473 に答える
2

この回答は NLTK v 3.0 に適用され、最近のバージョンには適用されないことに注意してください。

評判のためにこれをコメントとして残すことはできませんが、これを解決するのに時間を費やした (無駄にした?) ので、このパーサーを NLTK で動作させるために問題/解決策を共有したいと思います。

alvas から優れた 回答では、次のことが言及されています。

たとえば、パーサーの場合、モデル ディレクトリはありません。

これにより、私は間違って次のようになりました。

  • 私が入れた値に注意しないでくださいSTANFORD_MODELS (そして私のことだけを気にしますCLASSPATH
  • *実質的に空のまま../path/tostanford-parser-full-2015-2012-09/models directory* (または名前が nltk regex と一致しない jar ファイルを使用)!

私のように OP がパーサーを使用したいだけの場合、他に何もダウンロードせず (POStagger も NER も...)、これらすべての指示に従ってもエラーが発生するため、混乱する可能性があります。

最終的に、CLASSPATH特定の場合(このスレッドからの回答の例と説明に従ってください)、それでもエラーが発生します:

NLTK は stanford-parser-(\d+)(.(\d+))+-models.jar を見つけることができませんでした! CLASSPATH 環境変数を設定します。詳細については、stanford-parser-(\d+)(.(\d+))+-models.jar で、

参照: http://nlp.stanford.edu/software/lex-parser.shtml

また:

NLTK は stanford-parser.jar を見つけることができませんでした! CLASSPATH 環境変数を設定します。stanford-parser.jar の詳細については、http://nlp.stanford.edu/software/lex-parser.shtml を参照してください

重要なのは、次のように、すべての引数とパスを完全に指定して関数を呼び出すと、パーサーを正しく読み込んで使用できることです。

stanford_parser_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser.jar'
stanford_model_jar = '../lib/stanford-parser-full-2015-04-20/stanfor-parser-3.5.2-models.jar'    
parser = StanfordParser(path_to_jar=stanford_parser_jar, 
                    path_to_models_jar=stanford_model_jar)

パーサーのみのソリューション:

したがって、エラーは、提供された環境変数と環境変数NLTKを使用して jar を検索する方法から発生しました。これを解決するには、正しいフォーマット (コード内の正規表現と一致させるため、-corenlp-....jar はありません) の を、 で指定されたフォルダーに配置する必要があります。STANFORD_MODELSCLASSPATH*-models.jarNLTKSTANFORD_MODELS

つまり、最初に作成したのは次のとおりです。

mkdir stanford-parser-full-2015-12-09/models

次に追加しました.bashrc

export STANFORD_MODELS=/path/to/stanford-parser-full-2015-12-09/models

stanford-parser-3.6.0-models.jar最後に、 (または対応するバージョン) を次の場所にコピーします。

path/to/stanford-parser-full-2015-12-09/models/

を指すStanfordParserクラシックを使用して、Pythonでスムーズにロードできました。実際には、パラメータなしで呼び出すことができ、デフォルトで機能します。CLASSPATHstanford-parser.jarStanfordParser

于 2016-10-18T00:45:28.537 に答える