#mynavi(R言語入門); #setlinebreak(on); * 目次 [#aa1b3310] #contents - 関連 -- [[R言語入門]] -- [[Rでグラフ描画]] - 参考 -- http://taku910.github.io/mecab/ -- http://rmecab.jp/wiki/index.php?RMeCab -- http://rmecab.jp/wiki/index.php?RMeCabFunctions * 概要 [#o76388d8] #html(<div style="padding-left:10px">) Rを使用してテキストマイニングを行なう手順などを記載する。 ※主に RMeCab を使用した形態素解析のサンプルを記載。 #html(</div>) * インストール [#rf88e84e] #html(<div style="padding-left:10px">) ** MeCabのインストール [#i119ae71] #html(<div style="padding-left:10px">) MeCab 及び 辞書をインストール #myterm2(){{ # Macの場合 brew install mecab brew install mecab-ipadic }} ※ http://taku910.github.io/mecab/ #html(</div>) ** RMeCabのインストール [#he76b4dc] #html(<div style="padding-left:10px">) #myterm2(){{ # Mac、Linux の場合 > install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source") }} ※ http://rmecab.jp/wiki/index.php?RMeCab #html(</div>) #html(</div>) * RMeCabによる形態素解析 [#uf332ed0] #html(<div style="padding-left:10px">) ** テキストを解析 [#rbf8d494] #html(<div style="padding-left:10px">) まずは RMeCabC で短文を解析してみる。 #myterm2(){{ > library(RMeCab) > ans <- unlist(RMeCabC("RMeCabで簡単な文章を解析する")) > ans 名詞 助詞 名詞 助動詞 名詞 助詞 名詞 動詞 "RMeCab" "で" "簡単" "な" "文章" "を" "解析" "する" }} 名詞だけを抽出してみる #myterm2(){{ > library(RMeCab) > ans <- unlist(RMeCabC("RMeCabで簡単な文章を解析する")) > ans[names(ans)=="名詞"] 名詞 名詞 名詞 名詞 "RMeCab" "簡単" "文章" "解析" }} #html(</div>) ** ファイルを読み込んで解析 [#ref70822] #html(<div style="padding-left:10px">) 今度は RMeCabText でファイルからデータを読み込んで解析してみる。 #myterm2(){{ > 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] "ブンショウ" "ブンショー" }} 名詞のみを抽出してみる #myterm2(){{ > 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,] "解析" "名詞" "サ変接続" "*" "*" "*" "*" "解析" "カイセキ" "カイセキ" }} #html(</div>) #html(</div>) * サンプル(頻度表の作成) [#z4ce569b] #html(<div style="padding-left:10px">) ファイルから文章を読み込んで名詞の出現頻度を調べてみる。 ※ファイルは [[wikipediaのR言語>https://ja.wikipedia.org/wiki/R%E8%A8%80%E8%AA%9E]]の説明をそのままコピペして作成した。 ** RMeCabC による頻度表の作成 [#c0e16b2b] #html(<div style="padding-left:10px">) #myterm2(){{ > 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 }} #html(</div>) ** RMeCabFreq による頻度表の作成 [#wc0b1658] #html(<div style="padding-left:10px">) 結果でデータフレームが得られる為、使い勝手が良さそう。 ただ結果が若干 RMeCabC の場合と異なる。(RMeCabCのサンプルのテキストの繋げ方が悪いのか、他の理由なのかは不明だが..) ただ結果が若干 RMeCabC の場合と異なる。(※) ※「R」の件数が異なる。 ※ RMeCabCのサンプルのテキストの繋げ方が悪いのか、他の理由なのかは不明。 #myterm2(){{ > # データ読み込み(結果はデータフレーム) > 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 }} #html(</div>) ** RMeCabText による頻度表の作成 [#i500735e] #html(<div style="padding-left:10px">) dplyrのインストール #myterm2(){{ install.packages("dplyr") }} コード例 #myterm2(){{ > # 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 <fct> <int> 1 関数 81 2 R 76 3 データ 68 4 ベクトル 47 5 こと 46 6 2 41 7 . 40 8 1 40 9 言語 40 10 ( 38 }} #html(</div>) #html(</div>) * サンプル(wordcloudで形態素解析の結果を可視化する) [#tccf7625] * サンプル(wordcloudで形態素解析の結果を可視化する) [#d5025919] #html(<div style="padding-left:10px">) ** wordcloudのインストール [#x64774fb] #html(<div style="padding-left:10px">) #myterm2(){{ install.packages("wordcloud", dependencies=T) }} #html(</div>) ** 結果を可視化してみる [#d5a300b7] #html(<div style="padding-left:10px">) #myterm2(){{ library(wordcloud) result <- unlist(RMeCabC("........................")) wordcloud(result, min.freq=2, random.order=F) }} #html(</div>) #html(</div>) * サンプル(ネガポジ分析) [#o442b803] #html(<div style="padding-left:10px">) #TODO #html(</div>) // ** 覚え書き [#t29ef873] // #html(<div style="padding-left:10px">) // - データの作成 // -- 母集団の決定 // -- データの収集 // --- 全数調査と標本調査 // --- 単純無作為抽出法 // --- 層化無作為抽出法 (母集団をいくつかのグループに分けてそれぞれのグループから無作為に抽出) // --- 比例分配法 ... グループの大きさに比例した数を抽出する // --- 標本から得られた値から母集団における値を推定する際の精度は、標本の大きさの平方根に比例する。 // - データの分析 // -- 自然言語処理 // --- 形態素解析 // 単語分割、品詞情報の付与、単語の原型の復元を行う // --- 構文解析 // 文章中の単語の係り受け関係を明確にする処理。 // -- データマイニング // --- 頻度集計 // --- 統計処理 // --- 視覚化 // - テキストマイニングのアプローチ // -- 仮設発見型と仮設検証型 // - 分析対象となる品詞 // -- 名詞、動詞、形容詞、副詞、接続詞、代名詞、助詞、助動詞など // - 分析対象となる情報 // -- 読点、文字種、語種、文の長さ // - その他 // -- ポジティブ/ネガティブを判定する評判分析 // #html(</div>)