Tech Blog

Information Technology / Machine Learning / Data Analysis / Big Data / System Integration

RとRMeCabでテキストファイルをクラスタリングする

目的

今回は、複数のテキストファイルを類似したテキスト同士で分類する。

手法

Rの階層的クラスタリングは、各行がクラスタリング対象の特徴ベクトルからなる行列に対して、各行をクラスタに分ける。そこで、RMeCabでtf*idf行列を作成し、Rで階層的クラスタリングを行う。

・Rスクリプト

# ライブラリの読込み
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)