[python]MeCabでファイル内にある単語の出現度数分布を求める[tf/term frequency]

カテゴリ: MeCab, python

pythonでMeCabの分かち書き機能を利用して、特定のファイル内に存在する単語の出現回数を求めるプログラムです。
単語の出現回数を求めることは、自然言語処理の中ではtf(term frequency)と呼ばれています。

プログラム

# tf.py
import MeCab
import numpy

m = MeCab.Tagger ("-Owakati")
termFreq = {}

# ファイル内の全ての行を処理するまで繰り返し
for line in open('bocchan.utf8.txt', 'r'):

    # 1行取得して、MeCabで分かち書きする
    words = m.parse(line)
    words = words.rstrip('\n')
    wordArray = words.split()

    # 各行の全単語を処理するまで繰り返し
    for word in wordArray:
        # 既出の単語なら1加算、初めてなら1をセット
        if word in termFreq:
            termFreq[word] += 1
        else:
            termFreq[word] = 1


# 集計した単語の,出現回数を出力
for term, count in termFreq.items():
    print(count, term)

実行結果

前述のプログラムをtf.pyのファイル名で保存し、実行した結果です。
今回読み込ませたファイルは、青空文庫から取得した"坊ちゃん"を元にしています。

以下のコマンドで出現頻度が高い語のトップ200を出力してみました。当たり前ですが、"てにをは"などの一般的な言葉はよく使われるため上位に来ています。

他の文章でも使われるような一般的な単語を除外して、本文書ならではの特徴的な単語のみを抽出したい場合はtf-idfという仕組みを使うのが良いです。

$ python tf.py | sort -rn | head -n 200
2829 、
2451 。
2154 て
2109 の
1711 は
1690 が
1666 た
1651 を
1578 に
1563 と
1046 だ
902 で
807 ない
699 から
649 し
639 も
506 な
474 おれ
468 へ
403 か
340 」
340 「
327 ん
297 う
296 ある
291 事
251 いる
218 もの
216 云う
213 人
205 する
197 たら
185 です
184 君
178 赤
177 云っ
176 来
174 一
173 よう
171 なら
170 シャツ
160 い
158 じゃ
155 山嵐
155 そう
146 何
145 お
138 思っ
135 この
125 ば
121 てる
120 二
118 いい
117 なっ
116 出
115 方
114 だろ
108 時
104 まで
100 それ
99 これ
93 なる
92 清
92 三
92 ばかり
92 その
90 学校
89 野
88 でも
87 十
86 見
86 なり
84 聞い
84 れ
84 や
82 さ
81 ます
79 五
78 顔
78 ね
77 生徒
74 …
72 所
72 気
71 上
70 出し
70 校長
70 こんな
68 行っ
68 み
67 より
67 ――
64 中
63 奴
63 うち
62 もし
60 ませ
59 今
58 もん
58 なかっ
58 ところ
58 ちゃ
56 自分
56 考え
56 くれ
56 うら
55 出来
55 屋
55 あっ
54 日
54 男
54 ながら
53 前
53 なくっ
53 だけ
52 って
50 行く
50 やっ
50 また
50 さん
50 あの
48 円
48 あり
47 僕
47 知れ
47 先生
47 よく
47 なく
47 どう
47 しかし
46 声
46 もう
46 という
46 すぐ
45 見る
44 者
44 教師
44 下宿
44 やる
42 帰っ
41 喧嘩
41 そんな
41 くらい
40 大きな
40 居
40 まし
40 かも
39 訳
39 教頭
39 みる
39 まだ
39 ほど
39 なんて
39 おい
37 東京
37 手
37 何だか
37 どこ
37 つけ
37 しまっ
36 誰
36 持っ
36 今日
36 古賀
36 れる
36 よ
36 なけれ
36 ご
36 あなた
35 狸
35 少し
35 思う
35 向う
35 ぬ
35 だって
35 ず
35 ここ
35 ぐらい
34 目
34 分ら
34 通り
34 出来る
34 四
34 みんな
34 たり
34 かい
33 六
32 始め
32 あと
31 頭
31 田舎
31 寝
31 宿直
31 時間
31 云い
31 つもり
31 ため
31 ただ
31 すると
31 こう

参考記事

本作業を行う上で参考になりそうな他の記事です

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。