読者です 読者をやめる 読者になる 読者になる

RMeCabを使う (3)

 前回に引き続き、RMeCabパッケージの使い方を紹介します。これまでは単一のファイルのみを解析してきましたが、今回は複数ファイルの解析を扱います。
 まずは、カイ2乗値を用いて、テクスト間の頻度差が大きい語を特定してみましょう。

# パッケージの読み込み
library(RMeCab)
# データが保存されているフォルダの指定
setwd("C:/PM")
# 頻度集計
dm <- docDF("C:/PM", type = 1)
# カイ2乗値を用いて、テクスト間で頻度差の大きい語を特定
dm1 <- aggregate(dm[, -(1:3)], dm[1], sum)
rownames(dm1) <- dm1[, 1]
dm2 <- dm1[, -1]
dmSum <- colSums(dm2)
chiCheck <- function(x){
  tmp <- rbind(x, dmSum - x)
  tmp <- chisq.test(tmp)$statistic
  names(tmp) <- rownames(x)
  tmp
}
options(warn = -1)
dmVec <- apply(dm2, 1, chiCheck)
dmVec.sorted <- sort(dmVec, decreasing = TRUE)
# 統計量上位20位までを表示
head(dmVec.sorted)

 上記のスクリプトを実行すると、以下のような結果が表示されます。

   わたし    大震災        。      福島      被災    民主党    まいる      原発 
184.85362  85.73697  79.28798  73.48156  70.95485  59.53283  59.43069  48.97801 
     ます      ある      地方        0      危機    美しい        第      国会 
 47.16548  47.07145  41.42172  40.90116  39.82398  39.72697  39.51144  39.13218 
     など      雇用      段階      重要 
 38.07778  37.94899  37.76797  37.06492

 次に、文書中の単語の頻度を用いて、主成分分析階層型クラスター分析による文書分類を行います。複数ファイルにおける単語の頻度を集計するには、docMatrix関数を使います。*1

# 文書分類
# 頻度集計
docMatrix.result <- docMatrix("C:/PM")
# 解析に不要な情報を削除
docMatrix.result <- docMatrix.result[row.names(docMatrix.result) !=  "[[LESS-THAN-1]]" , ]
docMatrix.result <- docMatrix.result[row.names(docMatrix.result) !=  "[[TOTAL-TOKENS]]" , ]
# 頻度を標準化
docMatrix.scale <- scale(docMatrix.result)
# 行列を転置
docMatrix.scale.t <- t(docMatrix.scale)
# 主成分分析
pca <- prcomp(docMatrix.scale.t)
# 散布図の描画
biplot(pca)
# クラスター分析
# キャンベラ距離
d <- dist(docMatrix.scale.t, "canberra")
# 群平均法
hc <- hclust(d, "average")
# 樹形図の描画
plot(hc, hang = -1)

 上記のスクリプトを実行すると、以下のような散布図と樹形図が作成されます。

f:id:langstat:20141112150222p:plain

f:id:langstat:20140812181029p:plain

 因みに、特定の単語の頻度を知りたい場合はwhich関数を使います。*2

# 特定の単語の頻度を確認
docMatrix.result[which(rownames(docMatrix.result) == "グローバル"), ]

 上記のスクリプトを実行すると、以下のような結果が表示されます。

     Abe.txt      Aso.txt   Fukuda.txt Hatoyama.txt      Kan.txt     Noda.txt 
           1            0            0            1            1            1 

*1:docMatrix関数は、デフォルトでは名詞、動詞、形容詞のみを抽出しますが、引数posで変更することが可能です。詳しくは、こちらを参照してください。

*2:データに含まれる単語の一覧を確認するには、rownames(docMatrix.result) とします。また、単語の頻度の集計結果をファイルに書き出すには、write.table(docMatrix.result, file = "result.csv", sep = ",") などとします。

広告を非表示にする