Help us understand the problem. What is going on with this article?

R言語 - テキストのネガポジ度を分析する

More than 3 years have passed since last update.

はじめに

 任意のテキストファイルにどのような特性があるのか?そのテキストファイルに、ネガティブな発言が多いか、それとも、ポジティブな発言が多いかの傾向をざっくりと把握するには、ネガポジ度を分析するとよいです。このTipsでは、とある組織のウィークリーレポートを使って、その内容にどのような特性があるのかを分析してみます。手順としては、①ウィークリーレポートをRMeCabで形態素解析後、②単語感情極性表(注1)からスコアを算出し、③ネガポジ度を三次元円グラフで描画します。単語感情極性とは、その語が一般的に良い印象を持つか(positive) 悪い印象を持つか(negative)を表したものです。例えば、「良い」、「美しい」などはpositiveな極性、 「悪い」、「汚い」などはnegativeな極性を持ちます。

テキストのネガポジ度を分析する

▼サンプルスクリプト

R
# 三次元円グラフライブラリを読み込みます
library(plotrix)
# 日本語形態素解析ライブラリを読み込みます
library (RMeCab)
# 単語感情極性表(Semantic Orientations of Words)を読み込みます
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
# 形態素解析の結果から頻度表を作成します
war2007 <- RMeCabFreq("WAR2007_20140131-1258.txt")

※「WAR2007_20140131-1258.txt」はウィークリーレポートをテキスト化したものです。以下は、テキストの例です。
image

ネガポジ度を三次元円グラフで描画する

▼サンプルスクリプト

R
# 単語感情極性表に含まれるものを抽出します
war2007 <- subset(war2007,Term %in% sowdic2$term)
# 単語感情極性表の属性をマージします
war2007 <- merge(war2007,sowdic2,by.x=c("Term","Info1"),by.y=c("term","pos"))
# キーワード毎にスコア算出します
score2007 <- war2007[4:(ncol(war2007)-1)]*war2007$value
# 描画用データを作成します
war2007 <-c(sum(score2007 > 0),sum(score2007 < 0))
# 描画用ラベルを作成します
lbls <- c("positive", "negative")
lbls <- paste(lbls, war2007, sep=":")
# 三次元円グラフを描画します
pie3D(war2007, radius=0.9, labels=lbls, explode=0.1, main="2007年 週報ネガポジ度")

▼実行結果例
上記のサンプルコードは、2007年度の1年分をグラフ化したものです。これを2014年度分まで出力したものが次のグラフになります。
image

注釈

注1 今回の分析で利用させて頂いた、単語感情極性対応表はこちら↓
http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html

uchim
発言は個人の意見であり、所属団体を代表するものではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away