NLTK チャンキングを使用しており、ルールに一致した文字列を取得したいと考えています。例えば
ここに私の入力があります
The stocks show 67% rise, last year it was 12% fall
キャプチャしたい
67% rise
と12% fall
上記の文が示すPOSタグ付け
('The', 'DT'), ('stocks', 'NNS'), ('show', 'VBP'), ('67', 'CD'), ('%', 'NN'), ('rise', 'NN'), (',', ','), ('last', 'JJ'), ('year', 'NN'), ('it', 'PRP'), ('was', 'VBD'), ('12', 'CD'), ('%', 'NN'), ('fall', 'NN')
今、私は簡単なルールを思いつきました
Stat: {<CD><NN>(<NN>+|<VBN>|JJ)?}
これはうまく機能し、キャプチャします
('67', 'CD'), ('%', 'NN'), ('rise', 'NN')
('12', 'CD'), ('%', 'NN'), ('fall', 'NN')
今、キャプチャされた正確な文字列を抽出したいと思います。だから、欲しい
67% rise
と12% fall
私は試した
current=[]
for word,tag in subtree.leaves():
current.append(word)
print ' '.join(current)
しかし、私は得る
67 % rise
と12 % fall
%
と数字の間のスペースに注意してください。これは論理的には正しいですが、目的の出力ではありません。キャプチャされた文字列の開始インデックスと終了インデックスを知りたいので、正確な文字列が必要です。
どうすればこれを達成できますか?