読者です 読者をやめる 読者になる 読者になる

単語を重み付けする

 今回は、TF-IDF (term frequency–inverse document frequency) という方法で単語の重み付けを行う方法を紹介します。TFは単語の観測頻度、IDFは全文書数をその単語が出現した文書で割って対数をとった値となります。*1
 分析データは、金明哲先生が公開しておられる泉鏡花、岡本綺堂、島崎藤村の読点の打ち方を使わせて頂きます。

# 分析データ
mat <- read.csv("http://mjin.doshisha.ac.jp/data/IOScomma.csv", row.names = 1, header = TRUE)
# 分析データの確認
head(mat)

 上記のように、読み込んだデータの中身をhead関数で確認すると、以下のような結果が表示されます。*2

                て.  は.   で.  と.  が.   に.  ら.  も.  い.  り.  か.  し.  た.
IZ- 鷭狩      13.82 6.30  8.91 8.29 9.83 10.29 4.30 1.84 1.08 1.69 2.00 1.08 1.54
IZ-七宝の柱   12.66 7.34  5.78 4.69 7.03 10.31 2.34 3.91 2.03 2.19 0.62 1.56 1.88
IZ-伯爵の釵   14.74 7.74  6.20 6.28 6.28  9.56 2.85 2.70 1.61 1.02 1.90 0.95 2.92
IZ-化鳥       22.29 2.97 12.24 4.55 3.41  2.53 5.59 2.53 4.72 3.15 1.84 0.61 3.41
IZ-半島一奇抄 14.79 6.71  7.39 6.14 9.44  6.83 4.55 2.39 2.73 1.82 2.16 1.02 2.96
IZ-国貞えがく 16.17 4.77  7.33 4.42 7.77  7.07 3.36 2.83 2.83 1.24 1.06 1.06 3.98
               く.  の.  ん.  を.  あ.  え.  ば.  る. OTHERS
IZ- 鷭狩      1.69 3.23 0.92 1.84 1.23 1.38 0.31 0.92  17.51
IZ-七宝の柱   3.59 2.50 0.16 2.34 1.88 0.31 0.31 2.03  24.53
IZ-伯爵の釵   2.26 3.72 0.36 2.34 0.95 0.95 1.97 1.46  21.24
IZ-化鳥       0.44 6.03 0.00 1.14 0.61 1.05 0.26 2.97  17.66
IZ-半島一奇抄 0.57 1.59 0.91 2.16 1.02 0.68 0.68 1.25  22.18
IZ-国貞えがく 1.33 3.18 0.62 2.92 1.68 1.06 0.44 1.86  23.06

 このデータをTF-IDFで重み付けするには、lsaパッケージを使います。*3

# パッケージの読み込み
library(lsa)
# TF-IDF
weighted.mat <- lw_logtf(mat) * gw_idf(mat)
# 重み付け結果の確認
head(weighted.mat)

 上記のスクリプトを実行すると、以下のような結果が得られます。

              て.      は.      で.      と.      が.      に.      ら.      も.      い.       り.       か.       し.       た.
IZ- 鷭狩      2.695978 1.987874 2.293544 2.228939 2.382320 2.423917 1.667707 1.043804 0.7323679 0.9895412 1.0986123 0.7323679 0.9321641
IZ-七宝の柱   2.614472 2.121063 1.913977 1.738710 2.083185 2.425687 1.205971 1.591274 1.1085626 1.1600209 0.4824261 0.9400073 1.0577903
IZ-伯爵の釵   2.756205 2.167910 1.974081 1.985131 1.985131 2.357073 1.348073 1.308333 0.9593502 0.7030975 1.0647107 0.6678294 1.3660917
IZ-化鳥       3.359301 1.471301 2.756615 1.828818 1.583464 1.345949 2.012101 1.345949 1.8610139 1.5186191 1.1138581 0.5081963 1.5834637
IZ-半島一奇抄 2.759377 2.042518 2.127041 1.965713 2.345645 2.057963 1.713798 1.220830 1.3164082 1.0367369 1.1505720 0.7030975 1.3762440
IZ-国貞えがく 2.843164 1.752672 2.119863 1.690096 2.171337 2.088153 1.472472 1.342865 1.3428648 0.8064759 0.7227060 0.7227060 1.6054299
              く.       の.       ん.       を.       あ.       え.       ば.       る.       OTHERS
IZ- 鷭狩      0.9895412 1.4422020 0.6523252 1.0438041 0.8020016 0.8671005 0.2700271 0.6523252 2.918311
IZ-七宝の柱   1.5238800 1.2527630 0.1484200 1.2059708 1.0577903 0.2700271 0.2700271 1.1085626 3.239854
IZ-伯爵の釵   1.1817272 1.5518088 0.3074847 1.2059708 0.6678294 0.6678294 1.0885620 0.9001613 3.101892
IZ-化鳥       0.3891158 2.0810719 0.0000000 0.8118667 0.5081963 0.7660170 0.2466226 1.4713009 3.122784
IZ-半島一奇抄 0.4510756 0.9516579 0.6471032 1.1505720 0.7030975 0.5187938 0.5187938 0.8109302 3.143290
IZ-国貞えがく 0.8458683 1.4303112 0.4824261 1.3660917 0.9858168 0.7227060 0.3646431 1.0508216 3.180551

*1:X個のテクストの中でY個のテクストにその単語が現れている場合、Rであれば、log2(X / Y) とIDFを求めます。

*2:文字コードの関係で、「、」が「.」に文字化けしていることに注意してください。

*3:このパッケージでは、TF-IDF以外の重み付け方法も実装されています。詳しくは、PDFマニュアルを参照。