お知らせ

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

Rでテキストマイニングを試してみる(6)共起語

テキストマイニング

こんにちは。

まだまだテキストマイニングをやってみることにします。

共起語・コロケーションについて

突然ですが、「目薬を〇〇」、「辞書を□□」

この伏字になっているところに、どのような言葉を入れますか?

「目薬を入れる」ではなく「目薬を差す」、「辞書を読む」ではなく「辞書を引く」の方が多数派ではないでしょうか?

このような、よく使われる組み合わせをコロケーションというそうです。

コロケーションではありませんが、一緒に言葉が使われるケースがあります。

例えば、ネットで検索するときに「明大前」と入力すると「明大前 ラーメン」「明大前 賃貸」「明大前 ランチ」「明大前 居酒屋」と検索ワードの組み合わせの提案が表示されます。(Yahoo!で私が検索窓に「明大前」を入れた場合)

おそらく、多くの人がこのような組み合わせで検索した結果、提案されているのでしょう。

ちなみに、私は明大前に行くことがないので、明大前に関する検索履歴がないということで「明大前」を例にしました。

このように、よく使われる言葉の組み合わせを共起語というようです。

いずれにしても、一緒に使われる言葉の組み合わせには、何らかの特徴が表れるということでしょう。

ということで、このような語句の組み合わせを調べていくことにします。

Rで共起語を調べてみる

それでは、R を使って共起語を調べていきます。

題材は、相変わらず梶井基次郎作「檸檬」です。

「私」が最頻出語だったので、「私」と共起する語について調べてみます。

library(RMeCab)
result<-collocate(file.choose(),node="私",span=5)
head(result[order(result$Span,decreasing=TRUE),],10)

実行結果です。

            Term Before After Span Total
246   [[TOKENS]]    432   360  792  3178
245 [[MORPHEMS]]     97   147  244   830
169           私     72     0   72    72
80            は      6    46   52   110
78            の     18    26   44   176
52            た     27    11   38   156
3             。     29     3   32   132
104           を      3    27   30    85
57            だ     22     5   27   126
75            に     10    17   27   103

あまり特徴がわかりません。

そこで、別の値を使って調べてみます。

T値・MI値という値を容易に求めることができそうなので、それらを調べてみます。

T値・MI値というものについて調べたところ、Webでは大東文化大学の水谷先生のサイトが上位に表示されたのでリンクを貼っておきます。

書籍では、徳島大学の石田先生が書かれた本に、それぞれの値が持つ意味について書かれています。

この本によると、T値は平均値の差の検定を行う指標、MI値はある記号が出現することが別の特定の記号の出現を予測させる度合いを表す相互情報量に基づく指標ということのようです。

それでは、T値の高い順に表示してみます。

library(RMeCab)
result<-collocate(file.choose(),node="私",span=5)
result2<-collScores(result,node="私",span = 5)
head(result2[order(result2$T,decreasing=TRUE),],10)

実行結果です。

        Term Before After Span Total        T        MI
80        は      6    46   52   110 3.755135 1.0611303
104       を      3    27   30    85 1.961322 0.6395500
14        う      9     0    9    16 1.791693 1.3119753
109     以前      3     1    4     5 1.433606 1.8201222
171       時      3     1    4     5 1.433606 1.8201222
6         」      5     0    5     8 1.425511 1.4639784
166     始終      2     1    3     3 1.339642 2.1420503
1               11     0   11    29 1.335644 0.7435009
190       心      0     5    5     9 1.324191 1.2940534
35  しっくり      1     1    2     1 1.254013 3.1420503

次に、MI値の高い順に表示してみます。

library(RMeCab)
result<-collocate(file.choose(),node="私",span=5)
result2<-collScores(result,node="私",span = 5)
head(result2[order(result2$MI,decreasing=TRUE),],10)

実行結果です。

           Term Before After Span Total         T      MI
35    しっくり      1     1    2     1 1.2540132 3.14205
73      なんて      1     1    2     1 1.2540132 3.14205
153       現実      1     1    2     1 1.2540132 3.14205
10      いえる      0     1    1     1 0.7734424 2.14205
12        いつ      0     1    1     1 0.7734424 2.14205
16        える      0     1    1     1 0.7734424 2.14205
17        おく      1     0    1     1 0.7734424 2.14205
18  おもしろい      1     0    1     1 0.7734424 2.14205
20      かえる      1     0    1     1 0.7734424 2.14205
22      かける      1     0    1     1 0.7734424 2.14205

うーん、これが妥当なのかよくわかりません。

そろそろ、「檸檬」を読んで考えなければならないのかもしれません。(←短編だから早く読めよ!と自分にツッコミ)

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

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

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

Posted by kasugai