2017-02-19 31 views
4

は、次の文章を考える:python nltkを使って解析木を取得するには?

The old oak tree from India fell down. 

どのように私はPythonのNLTKを使用して文の次の構文解析ツリー表現を得ることができますか?

(ROOT (S (NP (NP (DT The) (JJ old) (NN oak) (NN tree)) (PP (IN from) (NP (NNP India)))) (VP (VBD fell) (PRT (RP down))))) 

ウェブで見つけられない完全な例が必要です。


編集

私はNLTKを使用して解析するについて学ぶためにthis book chapterを通じて行っているが、問題は、私は私が持っていない文章やフレーズを解析する文法を必要とする、です。私はthis stackoverflow postも見つけましたが、それは構文解析のための文法についても尋ねましたが、説得力のある答えはありません。

私は文を与えられた解析木を与える完全な答えを探しています。

+0

NLTKスタンフォードいずれかを使用優先するためのいくつかのパーサー(http://www.nltk.org/api/nltk.parse.html) IIRC Iを有しています。 –

+0

サンプルコードを教えていただけますか?私は本当にこれをクラックするのに苦労している。 –

+0

私は逃げ出してしまいました。もし誰も次の12時間以内に何も投稿しなければ、私は戻って何かを投稿します。それは私の古いコードのいくつかを掘り起こす必要があります(そしておそらくjuliaからPythonに翻訳する必要があります)。 –

答えて

4

nltkの代わりにStanfordCoreNLPを使用した代替ソリューションがあります。 StanfordCoreNLPの上に構築されるライブラリはほとんどありません。私は個人的に文章を解析するためにpycorenlpを使用します。

最初に*.jarファイルが入っているstanford-corenlp-fullフォルダをダウンロードする必要があります。そして、フォルダ内のサーバーを実行します(既定のポートは9000です)。

export CLASSPATH="`find . -name '*.jar'`" 
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer [port?] # run server 

次に、Pythonでは、文章にタグを付けるために以下を実行できます。

from pycorenlp import StanfordCoreNLP 
nlp = StanfordCoreNLP('http://localhost:9000') 

text = "The old oak tree from India fell down." 

output = nlp.annotate(text, properties={ 
    'annotators': 'parse', 
    'outputFormat': 'json' 
}) 

print(output['sentences'][0]['parse']) # tagged output sentence 
+0

それは私のために働いてくれてありがとう。単純な方法でこのタスクを実行できるかどうか疑問に思っています。 –

+0

木を解析するための高速なソリューションがNLTKにあるかどうかはわかりません。 pycorenlpラッパーでStanfordCoreNLPを使用することは、この作業の良い方法のようです。おそらく、テキストを解析するためにNLTKのStanfordNLPパスを追加する方法がありますか?私は代替ソリューションも知りたいです! – titipata

+0

@titipat起動サーバは次のエラーメッセージを出します: '無効な最大ヒープサイズ:-Xmx4g。指定されたサイズが表現可能な最大サイズを超えています。エラー:Java仮想マシンを作成できませんでした。エラー:致命的な例外が発生しました。プログラムは終了するでしょう。 – user1700890

関連する問題