お知らせ

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

Rでテキストマイニングを試してみる(3)N-gram

テキストマイニング

こんにちは。今回はRでN-gramを試してみます。

N-gramについては、以前Pythonを使って書いた記事があるのでリンクを貼っておきます。

RMeCab のN-gramの頻度を関数

RMeCabにはN-gramを求める関数がいろいろあるようです。

Ngram関数、NgramDF関数、NgramDF2関数、docNgram関数、docNgram2関数、docNgramDF関数あたりがN-gramの頻度を求めてくれそうです。

いろいろ試してみます。

RMeCab の Ngram関数

Ngram関数を使って、バイグラムの頻度を出してみます。

RMeCabのヘルプを見ると次のように書かれています。

Ngram

Description
    Ngram returns data frame of N-gram. Each item of N-gram makes one column.

Usage
   Ngram(filename, type = 0, N = 2, pos = “Default", dic = “", mecabrc = “", etc = “" )

Arguments
    filename a file
   type Default being 0.
   N N-gram. Default being 2
   pos argument3. Default being noun and adjective.
   dic to specify user dictionary, e.x. ishida.dic
   mecabrc not implemented (to specify mecab resource file)
   etc other options to mecab

Value
   returns a data frame.

Author(s)
   Motohiro ISHIDA ishida.motohiroあっとgmail.com (引用時にメールアドレスを一部変更)

References
   http://www.amazon.co.jp/dp/4627848420

Documentation for package ‘RMeCab’ version 1.04

引数がいろいろありますが、typeとNを変えて試していきます。

対象の文章は、前回に続き梶井基次郎「檸檬」です。

この後は、ひたすらRのコマンドとその結果を載せていきます。

文字単位でのバイグラム

文字単位でバイグラムの頻度を求めるコマンドです。

上位10件を表示してみます。

library(RMeCab)
result0<-Ngram(file.choose(),type = 0)
head(result0[order(result0$Freq,decreasing = TRUE),],10)

実行結果です。

       Ngram Freq
637  [っ-た]   90
548  [た-。]   67
638  [っ-て]   44
490  [し-て]   40
660  [て-い]   39
1926 [私-は]   39
539  [そ-の]   37
185  [い-た]   29
935  [の-だ]   29
542  [そ-れ]   26

形態素単位のバイグラム

形態素単位でバイグラムの頻度を求めるコマンドです。

主な変更点は、type引数を1に変えることです。

library(RMeCab)
result1<-Ngram(file.choose(),type = 1)
head(result1[order(result1$Freq,decreasing = TRUE),],10)

実行結果です。

          Ngram Freq
124     [の-私]    8
497     [私-心]    5
27  [こと-ない]    4
288   [果物-屋]    4
468   [私-それ]    4
563   [重い-さ]    4
102   [ない-私]    3
226   [暗い-の]    3
232   [以前-私]    3
316     [街-街]    3

品詞のバイグラム

形態素の品詞によるバイグラムを求めるコマンドです。

主な変更点は、type引数を2に変えることです。

library(RMeCab)
result2<-Ngram(file.choose(),type = 2)
head(result2[order(result2$Freq,decreasing = TRUE),],10)

実行結果です。

           Ngram Freq
67   [名詞-助詞]  610
29   [助詞-名詞]  321
27   [助詞-動詞]  316
51   [動詞-助詞]  171
52 [動詞-助動詞]  155
12   [記号-名詞]  129
38 [助動詞-名詞]  121
68 [名詞-助動詞]  117
71   [名詞-名詞]  112
32 [助動詞-記号]  110

文字単位でのトリグラム

次にトリグラムの頻度を求めてみます。

主な変更点は、N=3という引数を追加することです。

library(RMeCab)
result03<-Ngram(file.choose(),type = 0,N=3)
head(result03[order(result03$Freq,decreasing = TRUE),],10)

実行結果です。

          Ngram Freq
1177 [っ-た-。]   39
502  [か-っ-た]   20
1260 [て-い-た]   19
1375 [と-い-う]   17
1158 [だ-っ-た]   15
240  [あ-っ-た]   14
1265 [て-い-る]   14
991  [た-。- ]   12
1062 [た-の-だ]   12
1476 [な-か-っ]   12

文末の表現と思われるものが多そうです。

形態素単位のトリグラム

次に形態素単位でトリグラムの頻度を求めてみます。

library(RMeCab)
result13<-Ngram(file.choose(),type = 1,N=3)
head(result13[order(result13$Freq,decreasing = TRUE),],10)

実行結果です。

                     Ngram Freq
29          [こと-ない-私]    3
100           [どこ-の-私]    2
128           [の-果物-屋]    2
421             [胸-一-杯]    2
473         [香水-壜-煙管]    2
525             [私-画-本]    2
526             [私-街-街]    2
545             [私-心-圧]    2
563   [私-変-くすぐったい]    2
874 [変-くすぐったい-気持]    2

頻度が少なくなってしまいました。

品詞のトリグラム

品詞でのトリグラムの頻度を求めてみます。

library(RMeCab)
result23<-Ngram(file.choose(),type = 2,N=3)
head(result23[order(result23$Freq,decreasing = TRUE),],10)

実行結果です。

                 Ngram Freq
246   [名詞-助詞-名詞]  264
111   [助詞-名詞-助詞]  219
244   [名詞-助詞-動詞]  183
98    [助詞-動詞-助詞]  120
184   [動詞-助詞-動詞]  103
99  [助詞-動詞-助動詞]   99
41    [記号-名詞-助詞]   95
263   [名詞-名詞-助詞]   81
193 [動詞-助動詞-名詞]   68
149 [助動詞-名詞-助詞]   63

特徴があるのかな・・・?

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

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

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

Posted by kasugai