
昨日研究計画が通らなかった俺が書いてます。なんぞ学術カテゴリもこっちのほうが主になりつつありますが...
さて、センチメント分析/ネガポジ判定してその”ネガ”と”ポジ”ごとにひとつのテーブルにまとめて表示。これを中島敦の有名な著書でやってみました。なかなかムズかったのは日本語では英語のようにtidytextをうまい具合に使いこなせんことです。つーわけで別手法で似たようなプロットをggplotで出すためにRでやってみあしたよ。使用言語は下にも書くけどクレンジングにPerlを、分析にRを使います。
んで、指標の最適化にも苦労しました。コード見りゃわかると思うけど、テーブル操作に手間取ってしまい、頻出回数と指標自体をかけたり、適正化した指標が裏返るネガでは-1かけたり、ソートの手順をやっているうちにこんなんなってしまった...。以下ソースコード。なお、極性辞書には東工大の高村先生のものを使用させていただきました。先人の知恵と努力で研究が進むわけで、とてもありがたいです。クオートの高村先生の主論文です。
- Hiroya Takamura, Takashi Inui, Manabu Okumura,
"Extracting Semantic Orientations of Words using Spin Model", In Proceedings of the 43rd Annual Meeting of the Association for Computational Linguistics (ACL2005) , pages 133--140, 2005.
んっまあ、馬鹿なコードですが。わかったことをまとめてみます。install.packages("RMeCab", repos = "http://rmecab.jp/R")install.packages("ggplot2")library(RMeCab)library(ggplot2)sowdic <- read.table("http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic",sep=":",col.names=c("term","kana","pos","value"),colClasses=c("character","character","factor","numeric"),fileEncoding="Shift_JIS")sowdic2 <- aggregate(value~term+pos,sowdic,mean)sowdic2$value <- sowdic2$value + 0.6
sangetsuki <- RMeCabFreq("sangetsuki_2.txt")sangetsuki <- subset(sangetsuki,Term %in% sowdic2$term)sangetsuki <- merge(sangetsuki,sowdic2,by.x=c("Term","Info1"),by.y=c("term","pos"))sangetsukiscore_sangetsuki <- data.frame(sangetsuki)score_sangetsukiscore_sangetsuki_positive <- subset(score_sangetsuki, value>0)score_sangetsuki_positive_true <- transform(score_sangetsuki_positive, negative_value=score_sangetsuki_positive$Freq*score_sangetsuki_positive$value)score_sangetsuki_positive_true <- score_sangetsuki_positive_true[,c(1,6)]score_sangetsuki_positive_true$negaposi_label <- c(rep("positive",320))sortlist_p <- order(score_sangetsuki_positive_true$negative_value,decreasing=T)P <- score_sangetsuki_positive_true[sortlist_p,]rownames(P) <- c(1:nrow(P))P <- na.omit(P)P <- head(P,n=30)Pscore_sangetsuki_negative <- subset(score_sangetsuki, value<0)score_sangetsuki_negative_true <- transform(score_sangetsuki_negative, negative_value=score_sangetsuki_negative$Freq*score_sangetsuki_negative$value*-1)score_sangetsuki_negative_true <- score_sangetsuki_negative_true[,c(1,6)]score_sangetsuki_negative_true$negaposi_label <- c(rep("negative",286))sortlist_n <- order(score_sangetsuki_negative_true$negative_value,decreasing=T)N <- score_sangetsuki_negative_true[sortlist_n,]rownames(N) <- c(1:nrow(N))N <- na.omit(N)N <- head(N,n=30)Nscore_final <- rbind(P,N)sortlist_pn <- order(score_final$negative_value,decreasing=T)PN <- score_final[sortlist_pn,]rownames(PN) <- c(1:nrow(PN))PNggplot(PN,aes(x=reorder(Term,negative_value),y=negative_value,fill=negaposi_label)) +geom_col(show.legend = FALSE) +facet_wrap(~negaposi_label,scales="free_y") +labs(y = "Contribution to sentiment", x = NULL) +coord_flip()
・ネガのほうがポジよりも表現が読み取りにくい。
・ネガでは「ない」とか「ぬ」とか否定形の言葉が目立つ。
・一方ポジではできるとか達成感を象徴する才能がらみの言葉が目立つ。
んんんんんんこの程度ですかねぇ...もともと山月記は「才能の挫折」を描いてるのだから、これははっきりいって分析手法の適用方法が間違ってるかもしれない...。これを英文小説でやるとおもろいことになります。例えば、⇓の本によれば、missとかが女性を指す言葉であったり、ネガなほうのmissだったりするわけで除外せねばならないという項目があります。
一方日本語では複雑極まる文法とか多様な表現が目立つわけで、そこらが出ちゃって、無理があったかなぁといった感じです。これを別小説で邦訳に適用すればかなりおもしろいことになるかもしれません。テキストのクレンジングにはPerlをバッチファイル化して一括変換するものをネットの知識を借用して使用しました。この場を借りてありがとうと言わせていただきます...明日以降さらにいろいろやってみましょうか。金融にこれを活かすとかネ。
んなこといってるうちに大学院決めないとアカンわけですがwww