2017-03-03 12 views
0

私は非常に単純なパーサを使ってWSJコーパスからいくつかのタグ付き文をチャンクすることになっています。私は自分自身で文章にタグを付けますが、タグ付きの文章を得るために与えられた方法を使用してはいけません。1つのタグのセットが解析されないのはなぜですか?

私の割り当てでは、WSJコーパスnltk.corpus.treebank.tagged_sents()のタグ200-220を使用するように指示されました。私のパーサーは私にエラーを与えています。まさにそれを与える秒1であるのはなぜ

tag2 = nltk.corpus.treebank.tagged_sents()[200:220] 
print(cp.parse(tag2)) 
>>> ValueError: chunk structures must contain tagged tokens or trees 

:動作しません。自分のコードを使用して

tbss = concat(treebank.sents()[200:220]) 
tag1 = nltk.pos_tag(tbss) 
print(cp.parse(tag1)) 

(手動を作品の文章をタグ付け)作品私のコードエラー?私はタグ1とタグ2の両方のプリントを行い、それらはほぼ同じように見えます...なぜ、1つのパースと他のパージがありません...何か間違っていますか?

+0

構造体が印刷されない可能性があります。オブジェクトの 'repr(...)'を見たり、解凍したり、部分構造を個別に調べたりしてください。また、例外投げオブジェクトが特定のメソッドを逃している可能性がありますので、必要なインターフェイスを提供するために何らかの方法でラップする必要があります。 – lenz

+1

また、最初のケースでは、デフォルトのPOSタグを適用しています(私はこれを "手動で"、btwと呼ぶことはありません)、まず文を連結して、おそらく単一のタグ付きシーケンスを取得します。私は2番目のケースでそれが起こっているとは思わないので、おそらく複数のタグ付きシーケンス(すべてのセンテンスごとに1つ)があります。 – lenz

答えて

1

cp.parse()には、タグ付きトークンのリストではなく、文のリストを渡すので、エラーが発生します。 concatがどこから来たのかはわかりませんが、明確に(@ lenzコメントとして)、文章を単一の単語リストに連結します。 2番目のケースで同じことを行うには、cp.parse(concat(tag2))が必要です。

非常に珍しい文法がない限り、これは正しくありません。パーサーは一度に1つのセンテンスで作業するので、センテンスを別々にしておく必要があります。あなたの文のリストを繰り返し処理し、それぞれを解析するか、またはタグ付きのすべての文章をすぐにcp.parse_sents(tag2)で解析します。自己タグ付きツリーバンク文にも同じことが適用されます。これは、次のようにタグ付けされ、解析されるべきです。

tbss = treebank.sents()[200:220] 
tag1 = nltk.pos_tag_sents(tbss) 
parsed1 = cp.parse_sents(tag1) 
for sent in parsed1: 
    print(sent) 
+0

@alexis ...ありがとう。これはうまくいきました...あなたは私の他の質問を見てください。どうすればこの質問へのフォローアップができますか?この質問へのフォローアップはhttp://stackoverflow.com/questions/42572648/extending-the-grammar-to-handle-complex-npsです。私の主な仕事は、木バンクの文章をチャンクすることですが...すべてのケースを処理するのが難しい...また、このタイプのチャンク構文に関するWebに関する情報はほとんどありません:( –

+0

私はそれをしません、ごめんなさい。あなたの他の質問はnltkの構文ではなく英語の文法についてです。 – alexis

関連する問題