13

私はNLTKとPythonにかなり慣れていません。私は例にあるおもちゃの文法を使用して文の解析を作成してきましたが、自分で書いたりおもちゃを使用したりするのではなく、ペン ツリーバンクの一部から学んだ文法を使用できるかどうかを知りたいです。文法?(私はMacでPython 2.7を使用しています)どうもありがとう

4

2 に答える 2

13

NLTK に付属する Penn Treebank サンプルを正確にキャプチャする文法が必要な場合は、NLTK の Treebank データをダウンロードしたと仮定して、これを行うことができます (以下のコメントを参照)。

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 サンプルの単語を含む文のみを解析できます。

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

最後に、これは信じられないほど遅くなり、役に立たなくなります。したがって、このアプローチが機能することを証明するためだけに、単一の文から文法で動作しているのを見たい場合は、次のコードを試してください (上記のインポートの後に):

mini_grammar = ContextFreeGrammar(Nonterminal('S'),
                                  treebank.parsed_sents()[0].productions())
parser = nltk.parse.EarleyChartParser(mini_grammar)
print parser.parse(treebank.sents()[0])
于 2011-09-14T14:43:19.557 に答える
3

treebank_chunk または conll2000 コーパスでチャンカーをトレーニングすることができます。そこから文法を取得することはできませんが、句のチャンクを解析できる pickle 可能なオブジェクトを取得します。NLTKチャンカーをトレーニングする方法、NLTKを使用したチャンク抽出、およびNLTK 分類ベースのチャンカー精度を参照してください。

于 2011-08-14T17:01:23.480 に答える