web-dev-qa-db-ja.com

PythonのNLTKを使用して、動詞、名詞、その他の品詞を数えます

複数のテキストがありますが、名詞や動詞などのさまざまな品詞の使用法に基づいて、それらのプロファイルを作成したいと思います。基本的に、品詞が何回使われるかを数える必要があります。

テキストにタグを付けましたが、さらに先に進む方法がわかりません。

tokens = nltk.Word_tokenize(text.lower())
text = nltk.Text(tokens)
tags = nltk.pos_tag(text)

品詞ごとのカウントを変数に保存するにはどうすればよいですか?

18
Zach

pos_tagメソッドは、(トークン、タグ)ペアのリストを返します。

tagged = [('the', 'DT'), ('dog', 'NN'), ('sees', 'VB'), ('the', 'DT'), ('cat', 'NN')] 

Python 2.7以降を使用している場合は、次の方法で簡単に実行できます。

>>> from collections import Counter
>>> counts = Counter(tag for Word,tag in tagged)
>>> counts
Counter({'DT': 2, 'NN': 2, 'VB': 1})

カウントを正規化するには(それぞれの比率を指定します)、次のようにします。

>>> total = sum(counts.values())
>>> dict((Word, float(count)/total) for Word,count in counts.items())
{'DT': 0.4, 'VB': 0.2, 'NN': 0.4}

古いバージョンのPythonでは、Counterを自分で実装する必要があることに注意してください。

>>> from collections import defaultdict
>>> counts = defaultdict(int)
>>> for Word, tag in tagged:
...  counts[tag] += 1

>>> counts
defaultdict(<type 'int'>, {'DT': 2, 'VB': 1, 'NN': 2})
30
dhg