#概要
ショートショートを予め用意したカテゴリに自動分類する。
R環境を通して、MeCabで形態素解析しナイーブベイズを使ってカテゴリを推測する。
#環境設定
-> RMeCab のインストールと R を用いたテキスト処理(形態素解析など)
-> ニコニコ大百科データからMeCab辞書を生成する
#入力
フォルダにショートショートを格納する。
yyMMddhhmmss(フォルダ)
|ーakga_01.txt(ショートショート)
|ー :
|ー :
|ーakga_06.txt
|ーnkmk_01.txt
|ー :
|ー :
|ーnkmk_06.txt
|ーxxxx_01.txt
|ー :
|ー :
|ーxxxx_04.txt
※ファイルの接頭辞がカテゴリ名を表す。
akga/nkmkファイルが訓練データ。xxxxファイルが検証データ。
xxxx_01.txt,xxxx_02.txt=akga
xxxx_03.txt,xxxx_04.txt=nkmk
#処理
library(RMeCab)
library(e1071)
d <- as.data.frame(t(docMatrix2("<ショートショート格納フォルダ>", pos = c("名詞"), weight = "norm")))
d.train <- d[c(1:12),]
d.train["tag"] <- factor(sub("^([a-z]*?)_.*", "\\1", rownames(d.train), perl = T))
rownames(d.train)
d.test <- d[-c(1:12),]
rownames(d.test)
model <- naiveBayes(tag~., d.train, laplace = 0.5)
predict(model, d.test)
#出力イメージ
rownames(d.test)
[1] "xxxx_01.txt" "xxxx_02.txt" "xxxx_03.txt" "xxxx_04.txt"
predict(model, d.test)
[1] akga akga nkmk nkmk
Levels: akga nkmk
#感想
訓練データが少なく未知語が多数出る場合、
未知語へのペナルティを小さくしないと語彙の多いカテゴリに全て分類される気がする。
#参考サイト
-> バイオ・データ・マイニング/RでNaïve Bayesを使う - とうごろうぃき
-> 10行でナイーブベイズ ~Rって便利だね!~ - あらびき日記