目次 †
概要 †Rを使用してテキストマイニングを行なう手順などを記載する。 インストール †MeCabのインストール †MeCab 及び 辞書をインストール # Macの場合 brew install mecab brew install mecab-ipadic RMeCabのインストール †# Mac、Linux の場合
> install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source")
RMeCabによる形態素解析 †テキストを解析 †まずは RMeCabC で短文を解析してみる。 > library(RMeCab)
> ans <- unlist(RMeCabC("RMeCabで簡単な文章を解析する"))
> ans
名詞 助詞 名詞 助動詞 名詞 助詞 名詞 動詞
"RMeCab" "で" "簡単" "な" "文章" "を" "解析" "する"
名詞だけを抽出してみる > library(RMeCab)
> ans <- unlist(RMeCabC("RMeCabで簡単な文章を解析する"))
> ans[names(ans)=="名詞"]
名詞 名詞 名詞 名詞
"RMeCab" "簡単" "文章" "解析"
ファイルを読み込んで解析 †今度は RMeCabText でファイルからデータを読み込んで解析してみる。 > library(RMeCab)
> result<-RMeCabText('/path/to/R_test.txt')
file = /path/to/R_test.txt
> head(result, 5)
[[1]]
[1] "RMeCab" "名詞" "一般" "*" "*" "*" "*" "*" "" ""
[[2]]
[1] "で" "助詞" "格助詞" "一般" "*" "*" "*" "で" "デ" "デ"
[[3]]
[1] "簡単" "名詞" "形容動詞語幹" "*" "*" "*" "*"
[8] "簡単" "カンタン" "カンタン"
[[4]]
[1] "な" "助動詞" "*" "*" "*" "特殊・ダ" "体言接続" "だ" "ナ" "ナ"
[[5]]
[1] "文章" "名詞" "一般" "*" "*" "*" "*" "文章"
[9] "ブンショウ" "ブンショー"
名詞のみを抽出してみる > result<-RMeCabText('/path/toR_test.txt')
file = /path/to/R_test.txt
> # リストをベクトルに変換し、さらに行列に変換
> result_table<-matrix(unlist(result), ncol=10, byrow=T)
> # 名詞のみを抽出
> result_table[result_table[,2]=="名詞",] # 品詞は2列目にあるようなので2列目が "名詞" のものだけを抽出
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "RMeCab" "名詞" "一般" "*" "*" "*" "*" "*" "" ""
[2,] "簡単" "名詞" "形容動詞語幹" "*" "*" "*" "*" "簡単" "カンタン" "カンタン"
[3,] "文章" "名詞" "一般" "*" "*" "*" "*" "文章" "ブンショウ" "ブンショー"
[4,] "解析" "名詞" "サ変接続" "*" "*" "*" "*" "解析" "カイセキ" "カイセキ"
サンプル(頻度表の作成) †ファイルから文章を読み込んで名詞の出現頻度を調べてみる。 RMeCabC による頻度表の作成 †> all_text<-""
> texts = readLines("/path/to/R_wiki.txt")
> tmp<-lapply(texts, function(x){ all_text<<-paste(all_text, x); return (x)})
>
> ans<-RMeCabC(all_text)
> ans_vec<-unlist(ans)
> ans_noun<-ans_vec[names(ans_vec)=="名詞"]
> ans_table<-table(ans_noun)
> ans_sort_table<-sort(ans_table, decreasing = T)
> head(ans_sort_table, 10)
関数 R データ ベクトル こと 2 . 1 言語 (
81 76 68 47 46 41 40 40 40 38
RMeCabFreq による頻度表の作成 †結果でデータフレームが得られる為、使い勝手が良さそう。 > # データ読み込み(結果はデータフレーム)
> result<-RMeCabFreq("/path/to/R_wiki.txt")
file = /path/to/R_wiki.txt
length = 1294
> # 名詞のみ抽出
> resul_noun<-result[result$Info1=="名詞",]
> # ソート出現数の降順でソートした添字番号のリストを取得
> sort_list<-order(resul_noun$Freq, decreasing=T)
> # 取得した添字番号を条件にしてTOP10件を取得
> head(resul_noun[sort_list,], 10)
Term Info1 Info2 Freq
944 関数 名詞 一般 81
654 データ 名詞 一般 68
679 ベクトル 名詞 一般 47
1204 こと 名詞 非自立 46
1016 R 名詞 固有名詞 42
1180 2 名詞 数 41
243 . 名詞 サ変接続 40
918 言語 名詞 一般 40
1174 1 名詞 数 40
229 ( 名詞 サ変接続 38
RMeCabText による頻度表の作成 †dplyrのインストール install.packages("dplyr")
コード例 > # dplyrの読み込み
> library(dplyr)
> # データ読み込み(結果は配列のリスト)
> result<-RMeCabText("/path/to/R_wiki.txt")
file = /path/to/R_wiki.txt
> # ベクトル化
> result_v<-unlist(result)
> # 行列に変換
> result_table<-matrix(result_v, ncol=10, byrow=T)
> # 名詞のみを抽出
> resul_noun<-result_table[result_table[,2]=="名詞",]
> colnames(resul_noun) <- c("Term","col2","col3","col4","col5","col6","col7","col8","col9","col10")
> # 集計(名詞毎にグループ化)
> result_groups <- data.frame(resul_noun) %>% dplyr::group_by(Term) %>% dplyr::summarise(Freq = n())
> # ソート出現数の降順でソートした添字番号のリストを取得
> sort_list<-order(result_groups$Freq, decreasing=T)
> # 取得した添字番号を条件にしてTOP10件を取得
> head(result_groups[sort_list,], 10)
# A tibble: 10 x 2
Term Freq
サンプル(wordcloudで形態素解析の結果を可視化する) †wordcloudのインストール †install.packages("wordcloud", dependencies=T)
結果を可視化してみる †library(wordcloud)
result <- unlist(RMeCabC("........................"))
wordcloud(result, min.freq=2, random.order=F)
サンプル(ネガポジ分析) †TODO:
|