虚シコウ

粗い構成!薄い内容!ほとばしる素人意識!AI社会で虚快に暮らすヒント!

虚しいツイートを簡単な自然言語処理で感情評価する

「むなしい」「虚しい」「空しい」のいずれかが含まれているツイート3000件を抽出し、極性辞書を用いて感情評価を行い、結果を図で示すRプログラム

ソースコード

#ライブラリ
library(RMeCab)
library(pipeR)
library(dplyr)
library(rtweet) 

#ツイートを取得してファイル書き込み
x<- search_tweets("むなしい OR 空しい OR 虚しい",n=3000, include_rts=FALSE, langs = "ja")
write.csv(x$text,file = "t_munashii_1.csv",sep = ",", col.names=TRUE , row.names=FALSE)

# 単語感情極性表の読込み
sow <- 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")

#データを加工しスコア算出
word <- RMeCabFreq("t_munashii_2.csv")
word2 <- subset(word,Term %in% sow$term)
word2 <-  merge(word2,sow,by.x = c("Term","Info1"),by.y = c("term","pos"))
word2 <- word2[4:(ncol(word2)-2)]*word2$value

#結果を描画
word2 <-c(sum(word2 > 0.5 & word2 < 1.0),
               sum(word2 > 0 & word2 < 0.5),
               sum(word2 > -0.5 & word2 < 0),
               sum(word2 > -1.0 & word2 < -0.5)) %>>%
as.data.frame()

dv=c(word2[1:4,])
pie(dv,radius=1,labels=c(paste("ポジティブ(0.5~1):",dv[1]),
                         paste("ややポジティブ(0~0.5):",dv[2]),
                         paste("ややネガティブ(-0.5~0):",dv[3]),
                         paste("ネガティブ(-1~-0.5):",dv[4])),col=c("#08519c","#3182bd","#6baed6","#9ecae1"),
                        clockwise=T,border="#ffffff", main="むなしい OR 虚しい OR 空しい" , cex.main=1)

※補足

RMeCabはRから形態素解析エンジンMeCabを使うため。

pipeRは名の通りパイプ演算のため。 %>>% でコードスッキリ。

dplyrはデータ加工に便利らしいまだ具体的な関数等ほとんど把握してない

rtweetはTwitterスクレイピングに必須。頼れるRとTwitterの仲介人(?)。

これら外部ライブラリの恩恵を多分に受けて感情評価をしたところ、なんとこんな結果が...!

結果

・2019年8月(夏)

f:id:t-Oxy:20200127061916p:plain

・2020年1月(冬)

f:id:t-Oxy:20200127061711p:plain

考察

「虚しい」はネガティブな文脈で使われる言葉!でしょうね

暑かろうが寒かろうが "虚しさ=ネガティブ" という価値観は変わらないのか。でも対応する虚しさ/ネガティブ の種類は変化しているかも。それは追々...

虚メモ 

虚しい...ex)ネガティブなツイート