3

NLTK の POS タグを正規表現として使用して、文をチャンクしようとしています。文中の単語のタグに基づいてフレーズを識別する 2 つのルールが定義されています。

主に、 1 つ以上の動詞の後にオプションの決定詞が続き、最後に 1 つ以上の名詞が続くチャンクをキャプチャしたかったのです。これは定義の最初のルールです。しかし、それは Phrase Chunk として取り込まれていません。

import nltk

## Defining the POS tagger 
tagger = nltk.data.load(nltk.tag._POS_TAGGER)


## A Single sentence - input text value
textv="This has allowed the device to start, and I then see glitches which is not nice."
tagged_text = tagger.tag(textv.split())

## Defining Grammar rules for  Phrases
actphgrammar = r"""
     Ph: {<VB*>+<DT>?<NN*>+}  # verbal phrase - one or more verbs followed by optional determiner, and one or more nouns at the end
     {<RB*><VB*|JJ*|NN*\$>} # Adverbial phrase - Adverb followed by adjective / Noun or Verb
     """

### Parsing the defined grammar for  phrases
actp = nltk.RegexpParser(actphgrammar)

actphrases = actp.parse(tagged_text)

チャンカーへの入力、taged_text は次のとおりです。

tagged_text Out[7]: [('This', 'DT'), ('has', 'VBZ'), ('allowed', 'VBN'), ('the', 'DT'), ('device ', 'NN'), ('to', 'TO'), ('start,', 'NNP'), ('and', 'CC'), ('I', 'PRP'), (' then', 'RB'), ('see', 'VB'), ('glitch', 'NNS'), ('which', 'WDT'), ('is', 'VBZ'), ('ない', 'RB'), ('いいね', 'NNP')]

最終的な出力では、2 番目のルールに一致する副詞句 (' then see ') のみがキャプチャされています。口頭のフレーズ (「デバイスを許可しました」) が最初のルールと一致し、同様にキャプチャされることを期待していましたが、そうではありませんでした。

actphrases Out[8]: Tree('S', [('This', 'DT'), ('has', 'VBZ'), ('allowed', 'VBN'), ('the', 'DT' '), ('device', 'NN'), ('to', 'TO'), ('start,', 'NNP'), ('and', 'CC'), ('I', ' PRP'), Tree('Ph', [('then', 'RB'), ('see', 'VB')]) , ('グリッチ', 'NNS'), ('which', 'WDT '), ('is', 'VBZ'), ('not', 'RB'), ('nice.', 'NNP')])

使用される NLTK のバージョンは 2.0.5 (Python 2.7) です。ヘルプや提案をいただければ幸いです。

前もって感謝します、

バラ。

4

1 に答える 1