目次

概要

Rを使用してテキストマイニングを行なう手順などを記載する。
※主に RMeCab を使用した形態素解析のサンプルを記載。

インストール

MeCabのインストール

MeCab 及び 辞書をインストール

# Macの場合
brew install mecab
brew install mecab-ipadic

http://taku910.github.io/mecab/

RMeCabのインストール

# Mac、Linux の場合
> install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source")

http://rmecab.jp/wiki/index.php?RMeCab

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,] "解析"   "名詞" "サ変接続"     "*"  "*"  "*"  "*"  "解析" "カイセキ"   "カイセキ"

サンプル(頻度表の作成)

ファイルから文章を読み込んで名詞の出現頻度を調べてみる。
※ファイルは wikipediaのR言語の説明をそのままコピペして作成した。

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 による頻度表の作成

結果でデータフレームが得られる為、使い勝手が良さそう。
ただ結果が若干 RMeCabC の場合と異なる。(※)
※「R」の件数が異なる。
※ RMeCabCのサンプルのテキストの繋げ方が悪いのか、他の理由なのかは不明。

> # データ読み込み(結果はデータフレーム)
> 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
       
 1 関数        81
 2 R           76
 3 データ      68
 4 ベクトル    47
 5 こと        46
 6 2           41
 7 .           40
 8 1           40
 9 言語        40
10 (           38

サンプル(wordcloudで形態素解析の結果を可視化する)

wordcloudのインストール

install.packages("wordcloud", dependencies=T)

結果を可視化してみる

library(wordcloud)
result <- unlist(RMeCabC("........................"))
wordcloud(result, min.freq=2, random.order=F)

サンプル(ネガポジ分析)

TODO:

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-25 (月) 08:25:58 (29d)