3

Python で nltk モジュールを使用して、2 つから 5 つの名詞が連続して発生するインスタンスをまとめようとしています。

これは私が使用しているコードです:

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 つ以上の繰り返しをチャンクする方法についての助けをいただければ幸いです。

4

3 に答える 3

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>}"。うまくいけば、これで何かが機能するか、そうでなければ、セットアップで他に何が問題なのかを特定するのに役立つかもしれません.

于 2011-07-12T06:29:53.127 に答える
0

nltk は、次のタグを持つ名詞をタグ付けします。

  • <NN>単数名詞の場合
  • <NNP>単数の固有名詞の場合
  • <NNS>複数名詞の場合
  • <NNPS>複数の固有名詞の場合

したがって、これらのいずれかを 2 ~ 5 回キャッチしたい場合は、次の正規表現が必要になります。

<NN.*>{2,5}

あなたの例では、それは次のようになります。

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

sentenceタグ付けする必要があることに注意してください。

sentence = [("dog", "NN"), ("David", "NNP"), ("cats", "NNS")]
于 2014-01-18T05:48:18.547 に答える