頻度分布

テキストに特徴的な単語を自動的に見つけ出す方法を考えるとき、語彙の出現頻度というのは一つの指標になるだろうか。 ここでは頻度分布というものを考えてみる。

FreqDist

FreqDist() は各要素の出現頻度を計算する。

>>> fd=FreqDist(text)
>>> fd=FreqDist(text2)
>>> fd
FreqDist with 141576 outcomes
>>> voc=fd.keys()
>>> voc[:15]
[',', 'to', '.', 'the', 'of', 'and', 'her', 'a', 'I', 'in', 'was', 'it', '"', ';
', 'she']
>>> voc[:50]
[',', 'to', '.', 'the', 'of', 'and', 'her', 'a', 'I', 'in', 'was', 'it', '"', ';
', 'she', 'be', 'that', 'for', 'not', 'as', 'you', 'with', 'had', 'his', 'he', "
'", 'have', 'at', 'by', 'is', '."', 's', 'Elinor', 'on', 'all', 'him', 'so', 'bu
t', 'which', 'could', 'Marianne', 'my', 'Mrs', 'from', 'would', 'very', 'no', 't
heir', 'them', '--']

この上位50個の単語を見る限り、そのテキストを特徴付けるようなものにはなっていないことが分かる。

veryという単語が何回出現するかを調べるには次のようにします。

>>> fd['very']
492
>>>

1回だけ出現する単語を調べるにはhapaxes()を使います。

>>> fd.hapaxes()
(略)
>>>


長い単語に注目してみる

テキスト中の長い単語を調べる

テキスト中の長い単語は、そのテキストを特徴づけている可能性がある。text2の中の16文字よりも長い単語を調べてみよう。

>>> voc=set(text2)
>>> lw=[w for w in voc if len(w) > 16]
>>> sorted(lw)
['companionableness', 'disinterestedness', 'disqualifications']
>>>

多く出現する長い単語を調べる

長く、出現頻度の高い単語は、そのテキストをより特徴づけている可能性がある。 text3の中の7文字よりも長く13回以上出現する単語を調べてみよう。

>>> sorted([w for w in set(text3) if len(w) > 7 and fd[w] > 12])
[u'Abimelech', u'Benjamin', u'according', u'answered', u'brethren', u'children',
 u'circumcised', u'commanded', u'conceived', u'covenant', u'daughter', u'daughte
rs', u'firstborn', u'fruitful', u'gathered', u'generations', u'multiply', u'retu
rned', u'servants', u'themselves', u'therefore', u'together']
>>>

単語の長さの分布

単語の長さの分布を調べてみよう。

>>> fd=FreqDist([len(w) for w in text3])
>>> fd.keys()
[3, 4, 1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
>>>
>>> fd.items()
[(3, 11599), (4, 8984), (1, 7408), (2, 5968), (5, 4693), (6, 2549), (7, 1674), (
8, 928), (9, 599), (10, 182), (11, 123), (12, 39), (13, 9), (14, 7), (15, 2)]
>>> fd[3]
11599
>>> fd.freq(3)
0.2591144669823966
>>>

長さ16以上の単語はない。また、長さ3の単語が11599回出現し、その割合は25%以上になることが分かる。

条件付き頻度分布