RとRMeCabでテキストファイルをクラスタリングする
目的
今回は、複数のテキストファイルを類似したテキスト同士で分類する。
手法
Rの階層的クラスタリングは、各行がクラスタリング対象の特徴ベクトルからなる行列に対して、各行をクラスタに分ける。そこで、RMeCabでtf*idf行列を作成し、Rで階層的クラスタリングを行う。
・Rスクリプト
# ライブラリの読込み
library(proxy)
library(RMeCab)
write.table(a,"C:/LyricsWorkspace/DocMatrix/tfidf.txt")
write.table(sort(a.ct),"C:/LyricsWorkspace/hcresult.txt")
library(proxy)
library(RMeCab)
# 指定ディレクトリ中のファイル内に含まれる単語のtf*idfを行列に保持させる
a <- docMatrix("C:/LyricsWorkspace/Lyrics", weight = "tf*idf")
# ミンコフスキ距離を用いて、ウォード法で階層的クラスタリングを実行
# method=c("euclidean", "maximum", "manhattan", "canberra", "binary", "minkowski")
a.d <- dist(t(a), method="minkowski",p=100)
a.hc <- hclust(a.d, method="ward")
# クラスタリング結果を出力、プロット
a.ct <- cutree(a.hc, k=10)
par(ps=1)
plot(a.hc, hang=-1)
write.table(a,"C:/LyricsWorkspace/DocMatrix/tfidf.txt")
write.table(sort(a.ct),"C:/LyricsWorkspace/hcresult.txt")
2013/01/06追記
テキストの特徴行列をtf*idf法ではなくN-gramで解析するには、以下のように変更すればよい。
# 指定ディレクトリ中のファイル内に含まれる単語のtf*idfを行列に保持させる
a <- docNgram("C:/LyricsWorkspace/Lyrics", type=0, N=3)