テキストマイニング

「データからの知識発見」第14章 テキストマイニング

1
library(RMeCab)

形態素に分割

1
RMeCabC("本を読んだ")

[[1]]
名詞
“本”

[[2]]
助詞
“を”

[[3]]
動詞
“読ん”

[[4]]
助動詞
“だ”

原型に直して表示

1
RMeCabC("本を読んだ",1)

[[1]]
名詞
“本”

[[2]]
助詞
“を”

[[3]]
動詞
“読む”

[[4]]
助動詞
“だ”

http://www.is.ouj.ac.jp/lec/data/C14/index.html から作品をダウンロード

解凍するとC14フォルダができる。作業ディレクトリにコピーする。

次のコマンド実行。解析には数秒かかった。

1
2
a1<-docMatrix("C14",pos=c("連体詞","副詞"))
#a1<-docMatrix("C14",pos=c("連体詞","副詞"),2) #2回以上出現

file = C14/gongitsune.txt
file = C14/hana.txt
file = C14/hitofusano_budo.txt
file = C14/lemon.txt
file = C14/miminashi_hoichi.txt
file = C14/rashomon.txt
file = C14/torokko.txt
Term Document Matrix includes 2 information rows!
whose names are [[LESS-THAN-1]] and [[TOTAL-TOKENS]]
if you remove these rows, run
result[ row.names(result) != “[[LESS-THAN-1]]” , ]
result[ row.names(result) != “[[TOTAL-TOKENS]]” , ]

1
head(a1)

docs
terms gongitsune.txt hana.txt hitofusano_budo.txt lemon.txt miminashi_hoichi.txt rashomon.txt torokko.txt
[[LESS-THAN-1]] 0 0 0 0 0 0 0
[[TOTAL-TOKENS]] 2726 3520 3717 2889 4602 3287 2495
あんな 2 0 2 3 2 0 0
いったん 1 0 0 0 0 0 0
いつの間にか 1 1 1 1 0 1 0
いつも 3 2 3 1 1 0 0

a1の上2行を取り除く

1
2
3
a3<-a1[row.names(a1)!="[[LESS-THAN-1]]",]
a4<-a3[row.names(a3)!="[[TOTAL-TOKENS]]",]
head(a4)

docs
terms gongitsune.txt hana.txt hitofusano_budo.txt lemon.txt miminashi_hoichi.txt rashomon.txt torokko.txt
あんな 2 0 2 3 2 0 0
いったん 1 0 0 0 0 0 0
いつの間にか 1 1 1 1 0 1 0
いつも 3 2 3 1 1 0 0
いろんな 2 0 0 0 0 0 0
からっと 1 0 0 0 0 0 0

a1の1行目から2行目を取り除くには以下のコマンドも可

a4<-a1[-c(1:2),] #cの前の-はそれ以外の意味

頻度表を保存

1
write.table(a4,"hindo.txt")

特徴を多次元尺度法によりグラフにし、k-means法を用いて分類

a4の行と、列を入れ替える(転置)

1
2
3
4
5
c1<-t(a4)
#多次元尺度法の手順
c2<-dist(c1)
c3<-cmdscale(c2,eig=T)
c3

$points
[,1] [,2]
gongitsune.txt -16.734896 8.813928
hana.txt 4.055198 15.451395
hitofusano_budo.txt -13.879645 -5.824651
lemon.txt -6.336276 -10.428633
miminashi_hoichi.txt 17.821367 -12.069433
rashomon.txt 25.227886 5.489024
torokko.txt -10.153634 -1.431631

$eig
[1] 1.586438e+03 6.369640e+02 2.703132e+02 2.207154e+02 1.861505e+02 1.651332e+02 -1.074819e-13

$x
NULL

$ac
[1] 0

$GOF
[1] 0.7252476 0.7252476

1
2
3
4
5
6
c4<-c3$points
#k-means法
c5<-kmeans(c1,2)
c6<-c5$cluster
plot(c4,xlim=c(-30,30),t="n",main="多次元尺度法による可視化")
text(c4,rownames(c1),col=c6)