お知らせ

ただいま、シンタックスハイライターの設定を見直しております。
プログラムが見にくくなっているページがありますが、ご容赦ください。

Rでテキストマイニングを試してみる(5)TF-IDF

テキストマイニング

こんにちは。引き続き、梶井基次郎作品を使ってテキストマイニングをしていきます。

今回はTF-IDFを求めてみます。

以前、TF-IDFについてこのような投稿をしていました。

単に出現頻度を求めるのではなく、ある文章だけに出現する語のウエイトを高くして、複数の文章に共通して出現する語のウエイトを低くすると、文章ごとの特徴がある語を見付けられるという感じでしょうか。

また、Progate の Python II までに出てくる文法程度でTF-IDFを求めるプログラムについても投稿していました。

RMeCab を使うと、ものすごく簡単に求められてしまいます。

RMeCab で TF-IDF

ということで、早速、TF-IDF を求めてみることにします。

比較する文章は、前回と同じ梶井基次郎作「愛撫」「檸檬」「桜の樹の下には」の3つの短編小説を使います。

library(RMeCab)
tfidf<-docMatrix(choose.dir(),weight = "tf*idf")
head(tfidf[order(tfidf[,2],decreasing = TRUE),],10)

choose.dir の箇所では、3つの文章のファイルが保存されているディレクトリを選択します。

実行結果

上のプログラムでは、実行結果として「檸檬」での TF-IDF が高い順に表示されます。

      docs
terms   aibu.txt lemon.txt sakurano_kino_shitaniwa.txt
  私    39.62406 114.11730                     0.00000
  の    27.00000  46.00000                    16.00000
  街     0.00000  33.60451                     0.00000
  檸檬   0.00000  23.26466                     0.00000
  もの   8.00000  20.00000                     6.00000
  こと  19.00000  19.00000                     6.00000
  それ  12.00000  19.00000                    14.00000
  果物   0.00000  18.09474                     0.00000
  丸善   0.00000  18.09474                     0.00000
  好き   0.00000  18.09474                     0.00000

「檸檬」では、「私」が飛びぬけて高いです。続いて「の」「街」「檸檬」となっています。

次に、「愛撫」で TF-IDF が高い順に表示してみます。

head(tfidf[order(tfidf[,1],decreasing = TRUE),],10)

実行結果です。

      docs
terms    aibu.txt  lemon.txt sakurano_kino_shitaniwa.txt
  私    39.624063 114.117300                    0.000000
  猫    38.039100   0.000000                    1.584963
  耳    33.604513   0.000000                    0.000000
  の    27.000000  46.000000                   16.000000
  こと  19.000000  19.000000                    6.000000
  よう  19.000000  17.000000                   23.000000
  爪    18.094738   0.000000                    0.000000
  彼    15.509775   0.000000                    0.000000
  前足  12.924813   0.000000                    0.000000
  空想  12.679700   0.000000                    1.584963

「愛撫」では、「私」はやはり高いのですが、続く「猫」「耳」とは大きく離れているわけではありません。

最後に「桜の樹の下には」でのTF-IDFが高い順に並べてみます。

head(tfidf[order(tfidf[,3],decreasing = TRUE),],10)

実行結果です。

        docs
terms    aibu.txt lemon.txt sakurano_kino_shitaniwa.txt
  俺      0.00000   0.00000                    64.62406
  屍体    0.00000   0.00000                    28.43459
  桜      0.00000   0.00000                    23.26466
  よう   19.00000  17.00000                    23.00000
  おまえ  0.00000   0.00000                    18.09474
  樹      0.00000   0.00000                    18.09474
  の     27.00000  46.00000                    16.00000
  それ   12.00000  19.00000                    14.00000
  下      0.00000   0.00000                    12.92481
  いま    0.00000   0.00000                    10.33985

かなり結果が異なり、「俺」「屍体」「桜」となっています。

特徴的なのは、先の2作品の一人称が「私」だったのが、「桜の樹の下には」の一人称は「俺」になっていることではないかと思います。それに応じてなのか、二人称の「おまえ」も頻出しています。

今回はこれでおしまいにします。それではまた。

この記事を書いた人
春日井 優

高校で情報科という教科を担当しています。以前は数学科も担当していました。(今でも数学科の教員免許状は有効です。)プログラムを覚えたのは、「ゲームセンターあらし」という漫画のキャラクターがBASICを解説する「こんにちはマイコン」を読んだことがきっかけでした。

Posted by kasugai