2011-08-14 11 views
14

私はNLTKとPythonにかなり新しいです。私は例で与えられたおもちゃの文法を使って文の構文解析を作成してきましたが、私は自分自身を書くことやおもちゃを使うのとは対照的に、Penn Treebankの一部から学んだ文法を使うことができるかどうかを知りたいと思います文法? (私はMacでPython 2.7を使用しています) 多くのありがとうPenn TreebankからPythonとNLTKを使って一連の文法ルールを取得するにはどうすればよいですか?

答えて

14

あなたは正確にNLTKに付属しているペンツリーバンクのサンプルをキャプチャ文法をしたい場合は、あなたがこれを行うことができ、あなたがNLTKのためにツリーバンクのデータをダウンロードしたと仮定すると(下記のコメントを参照):

import nltk 
from nltk.corpus import treebank 
from nltk.grammar import ContextFreeGrammar, Nonterminal 

tbank_productions = set(production for sent in treebank.parsed_sents() 
         for production in sent.productions()) 
tbank_grammar = ContextFreeGrammar(Nonterminal('S'), list(tbank_productions)) 

このしかし、おそらくあなたに何か有用なものを与えません。 NLTKはすべてのターミナルを指定した文法での解析のみをサポートしているため、Treebankサンプルの単語を含む文を解析することはできません。

また、ツリーバンクの多くのフレーズのフラットな構造のため、この文法は、トレーニングに含まれていなかった文に非常にあまり一般的ではありません。このため、ツリーバンクを解析しようとしたNLPアプリケーションは、TreebankからCFGルールを学習する手法を使用していませんでした。これに最も近い技術は、Ren Bodsのデータ指向の解析アプローチですが、はるかに洗練されています。

最後に、これは信じられないほど遅く、役に立たないでしょう。だから、あなたはちょうどそれが動作することを証明するために、単一の文から文法上のアクションで、このアプローチを見たい場合は、(上記の輸入後の)次のコードを試してみてください。

mini_grammar = ContextFreeGrammar(Nonterminal('S'), 
            treebank.parsed_sents()[0].productions()) 
parser = nltk.parse.EarleyChartParser(mini_grammar) 
print parser.parse(treebank.sents()[0]) 
+0

私は2番目のコードを実行することができませんよスニペット。それは私に次のエラーを与えます:リソース 'corpora/treebank/combined'が見つかりません。 –

+2

NLTKをインストールしたときにTreebankデータをインストールしなかった可能性が最も高い原因です。 [NLTK Data instructions](http://www.nltk.org/data)を参照してください。基本的に、Pythonインタプリタでは、 'nltk'をインポートし、' nltk.download() 'を呼び出すウィンドウに" Corpora "タブをクリックし、" treebank "を選択し、最後に" Download "をクリックします。完了したら閉じてください。 – Constantine

関連する問題