LoginSignup
73
79

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-24

はじめに

 任意のテキストファイルにどのような特性があるのか?そのテキストファイルに、ネガティブな発言が多いか、それとも、ポジティブな発言が多いかの傾向をざっくりと把握するには、ネガポジ度を分析するとよいです。この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

73
79
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
73
79