2011-07-12 3 views
3

私はPythonでnltkモジュールを使用して、2つから5つの名詞が連続して存在するインスタンスをまとめることを試みています。nltkを使って、タグ付き文でタグの2回以上の反復をチャンクする方法はありますか?

これは私が使用していたコードです:私はこのビットはトリックを行う必要があることを理にかなって

parse_pattern = "Keyword: {< N>{2,5}}" 
keyword_parser = nltk.RegexpParser(parse_pattern) 
result = keyword_parser.parse(sentence) 

を:Keyword: {< N>{2,5}}

私も使用してPythonの持つ書籍自然言語処理の例を見つけました上記のビットは完全に類似しています:NOUNS: {< N.*>{4,}}著者は、そのビットが4つ以上の名詞をチャンクする必要があることを説明しています。

ValueError: Illegal chunk pattern: {< N>{2,5}} 

注:私も試してみました(前述の本の著者が行っただけであるため、ドットスターと){< N.*>{2,5}}を用いて、上記とは私は上記のコードを実行していないとき

はしかし、私はエラーを取得します運。

タグを2回以上繰り返してチャンクする方法についてのご意見は高く評価されます。

答えて

2

とValueErrorが、おそらく、また、開口角度ブラケットとの間のスペースとN.

parse_pattern = "Keyword: {<N>{2,5}}"ではなく
parse_pattern = "Keyword: {< N>{2,5}}"

によってトリガーされ、余分なドットスターとの構文を使用して、心配しないでくださいこれは、の開始と一致するすべてのタグを一致させようとしている場合にのみ必要です。ここでNは

です。

すべてが失敗した場合は、{min、 max}の構文を使用します。 parse_pattern = "Keyword: {<N><N><N>?<N>?<N>?}"

そして、それが失敗した場合でも、多分ちょうどparse_pattern = "Keyword: {<N>}"、これがうまくいけば動作するように何かになるだろう試すか、そうでなければ多分あなたのセットアップで間違っている可能性があります他に何特定に役立ちます。次のタグ付き

0

NLTKタグ名詞:

  • <NN>単数名詞ため
  • <NNP>複数固有名詞ための複数の名詞
  • <NNPS>ための特異固有名詞
  • <NNS>ため

このように、 2と5倍の間でこれらの、あなたは正規表現をお勧めします:

<NN.*>{2,5} 

あなたの例では、それは次のようになります。sentenceは、例えば、タグ付けされなければならないことを

parse_pattern = "Keyword: {<NN.*>{2,5}}" 
keyword_parser = nltk.RegexpParser(parse_pattern) 
result   = keyword_parser.parse(sentence) 

注意

sentence = [("dog", "NN"), ("David", "NNP"), ("cats", "NNS")] 
関連する問題