- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-03-04T02:57:08+00:00","","")
[[R言語入門]] >
* Rでテキストマイニング [#kdeb763d]
#mynavi(R言語入門);
#setlinebreak(on);
* 目次 [#aa1b3310]
#contents
-- 関連
--- [[R言語入門]]
--- [[Rでグラフ描画]]
- 関連
-- [[R言語入門]]
-- [[Rでグラフ描画]]
- 参考
-- http://taku910.github.io/mecab/
-- http://rmecab.jp/wiki/index.php?RMeCab
-- http://rmecab.jp/wiki/index.php?RMeCabFunctions
** テキストマイニングの手順 [#q3016a78]
* 概要 [#o76388d8]
#html(<div style="padding-left:10px">)
#TODO
- データセットの構築
Rを使用してテキストマイニングを行なう手順などを記載する。
※主に RMeCab を使用した形態素解析のサンプルを記載。
#html(</div>)
** XXXX [#j0a9492e]
* インストール [#rf88e84e]
#html(<div style="padding-left:10px">)
#TODO
** 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>)
** XXXX [#w174f709]
** RMeCabのインストール [#he76b4dc]
#html(<div style="padding-left:10px">)
#TODO
#myterm2(){{
# Mac、Linux の場合
> install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source")
}}
※ http://rmecab.jp/wiki/index.php?RMeCab
#html(</div>)
** XXXX [#v94fd5d3]
#html(</div>)
* RMeCabによる形態素解析 [#uf332ed0]
#html(<div style="padding-left:10px">)
#TODO
** テキストを解析 [#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>)
** XXXX [#d678d346]
** ファイルを読み込んで解析 [#ref70822]
#html(<div style="padding-left:10px">)
#TODO
今度は 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>)
** 覚え書き [#t29ef873]
#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 の場合と異なる。(※)
※「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で形態素解析の結果を可視化する) [#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>)