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

データサイエンスしてみる

新米エンジニアがデータサイエンスを勉強する。機械学習とかRとかPythonとか

RMeCabで文章マトリックスとTF-IDFを計算する

R言語 自然言語処理

今回はテキストマイニングへの一歩としてRMecabを勉強します。
RMeCabの標準関数として文章の単語マトリクスとTF-IDFの計算を行います。

単語マトリクスとは複数の文章における単語の出現頻度をベクトル表示したものです。
bag of wordsモデルでは単語同士を互いに独立に扱うため、このような単語マトリクスが用いられるようです。
次のTF-IDFは文章中の出現単語への重み付けです。
ある文章中に出現する単語がほかの文章で出現しない場合は、その単語はその文章を特徴付ける単語であるといえるでしょう。
その単語がどれくらい特徴的かを表すのがTF-TDFになります。
詳しい数学的な背景は置いておくとしてとりあえず解析してみましょう。

今回使う文章は青空文庫より夏目漱石の「こころ」、「三四郎」、「それから」を使用しました。
青空文庫 Aozora Bunko

それぞれテキスト形式をダウンロードし、一つのフォルダに保存しておきます。
一つのフォルダ直下にテキストファイルを置いておくことで手軽に一括で解析できます。
私の環境では"C:/work/aozora"という形でC直下に作業用のフォルダに突っ込んでます。

さて、さっそくテキストマイニングをします。
今回は名詞のみ抽出して計算します。

library(RMeCab)
matrix <- docMatrix("C:/work/aozora", pos=c("名詞"))
tfidf <- docMatrix("C:/work/aozora", weight="tf*idf")

なんと解析はこれだけで出来ます。
結果はこんな感じ

単語マトリクス
                           docs
terms                       kokoro.txt sanshiro.txt sorekara.txt
  -                                 71           75           86
  -------------------------          2            2            2
  [[LESS-THAN-1]]                    0            0            0
  [[TOTAL-TOKENS]]              104587        96039       113026
  あい                               5            5            9
  あいさつ                          18           16           14
  アイスクリーム                     3            0            1
  あいそ                             1            1            2
  あいだ                            17           79            1
  あいまい                           2            1            5
  アイロニー                         2            2            0
  あおみ                             1            0            0
  あか                               3            4            2
  あからさま                         1            2            1
  あかり                             1            0            2
  あき                               2            1           10
  あく                               3            0            2
  あくび                             1            2            2
  あぐら                             2            5            5
  あげく                             2            0            0
  あご                               2            3            7
  あし                               2            2            2
  あすこ                             3           10            2
  あそこ                             1            0            0
  あたい                             3            0            2
  あたり                             3            7           11
  あちら                             4            1            0
  あて                              11            5            9
  あと                              78           73           20
  あなた                           187           61           29
TF-IDF
                           docs
terms                       kokoro.txt sanshiro.txt sorekara.txt
  -                          71.000000    75.000000    86.000000
  -------------------------   2.000000     2.000000     2.000000
  あい                        5.000000     5.000000     9.000000
  あいさつ                   18.000000    16.000000    14.000000
  アイスクリーム              4.754888     0.000000     1.584963
  あいそ                      1.000000     1.000000     2.000000
  あいだ                     17.000000    79.000000     1.000000
  あいまい                    2.000000     1.000000     5.000000
  アイロニー                  3.169925     3.169925     0.000000
  あおみ                      2.584963     0.000000     0.000000
  あか                        3.000000     4.000000     2.000000
  あからさま                  1.000000     2.000000     1.000000
  あかり                      1.584963     0.000000     3.169925
  あき                        2.000000     1.000000    10.000000
  あく                        4.754888     0.000000     3.169925
  あくび                      1.000000     2.000000     2.000000
  あぐら                      2.000000     5.000000     5.000000
  あげく                      5.169925     0.000000     0.000000
  あご                        2.000000     3.000000     7.000000
  あし                        2.000000     2.000000     2.000000
  あすこ                      3.000000    10.000000     2.000000
  あそこ                      2.584963     0.000000     0.000000
  あたい                      4.754888     0.000000     3.169925
  あたじけない                1.584963     0.000000     1.584963
  あたたかい                  3.169925     0.000000     1.584963
  あたり                      3.000000     7.000000    11.000000

生の結果には数字や記号が混じっていて非常に見づらいのでそれらを削除してやる必要がありますが、それは追々やっていくということで。

単語マトリクスの作成はともかく、TF-IDFは自分の手で書くにはちょっと面倒なので、このように手軽に使えるのは便利です。

Rはオンメモリなので大量のテキスト解析はできませんが実験レベルではやはり強力ですね。
今後もRMeCabの関数を一通り触ってみようと思います。