こんばんわ!Keisukeです!
前回に引き続き感情分析を行うにあたっての感情に起因する単語の設定を行いたいと思います!
試しにデータの取集が容易な, いわゆる失恋ソングを利用したいと思います.
失恋などに繋がる”悲しい”,”寂しい”などのネガティブな感情に起因する単語を検出したいと思います.
ディレクトリ
negative_word_setting.py
sentence
ここに解析する文章を入れる
ex)
sentence
n0.txt
n1.txt
n2.txt
・
・
・
失恋ソング15曲から感情起因する単語を抽出したいと思います!
以下コード
**************************
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.tokenfilter import *
import collections as coll
import os
# ポジティブ な文章の解析
# どんなワードが人にポジティブな印象を与えるか?
if __name__ == ‘__main__’:
# ——————–形態素解析 初期設定——————– #
noun = []
verb = []
token_filters = [POSKeepFilter(‘名詞’), TokenCountFilter()]
a_noun = Analyzer(token_filters=token_filters)
token_filters_v = [POSKeepFilter(‘動詞’), TokenCountFilter()]
a_v = Analyzer(token_filters=token_filters_v)
# ———————————————————- #
# ——————–解析用 文章パス取得——————– #
sent_dir = os.path.abspath(os.path.dirname(__file__)) + ‘/sentence/’
files = os.listdir(sent_dir)
print(len(files))
# ———————————————————- #
# ——————–文章解析——————– #
for file in files:
”’
if file == ‘.DS_Store’ :
continue
”’
comparing_sent_path = sent_dir + file
f = open(comparing_sent_path)
#print(comparing_sent_path)
line = f.readline()
while line:
#print(line)
for k0, v0 in a_noun.analyze(line):
noun.append(k0)
for k1,v1 in a_v.analyze(line):
verb.append(k1)
line = f.readline()
#print(“名詞 : “,len(noun))
#print(“動詞 : “,len(verb))
f.close()
# ——————–解析終了——————– #
print(“名詞 : “,len(noun))
print(“動詞 : “,len(verb))
# ——————–頻出頻度——————– #
noun_collections = coll.Counter(noun)
noun_list = noun_collections.most_common()
verb_collections = coll.Counter(verb)
verb_list = verb_collections.most_common()
print(“名詞”,’\n’)
for i in range(10):
print(noun_list[i][0],” : “,noun_list[i][1])
print(‘\n’)
print(“動詞”,’\n’)
for s in range(10):
print(verb_list[s][0],” : “,verb_list[s][1])
print(‘\n’)
# ———————————————– #
# ——————–データ保存——————– #
f = open(‘positive_word.txt’,’w’)
f.write(“名詞出現数”)
f.write(” : “)
f.write(str(len(noun_list)))
f.write(‘\n’)
for i in range(len(noun_list)):
f.write(noun_list[i][0])
f.write(” : “)
f.write(str(noun_list[i][1]))
f.write(‘\n’)
f.write(‘\n’)
f.write(“動詞出現数”)
f.write(” : “)
f.write(str(len(verb_list)))
f.write(‘\n’)
for s in range(len(verb_list)):
f.write(verb_list[s][0])
f.write(” : “)
f.write(str(verb_list[s][1]))
f.write(‘\n’)
f.close()
# ————————————————- #
**************************
実行結果
あなた : 32
人 : 23
Ooh : 22
君 : 20
私 : 19
今 : 19
日 : 16
の : 15
誰 : 14
二 : 12
動詞
し : 25
て : 17
てる : 13
見 : 11
れ : 10
くれ : 10
いる : 9
愛さ : 8
い : 7
居 : 7
う~ん…ただ単純に失恋ソングで出てきやすい名詞, 動詞を表示しただけになりましたね…
感情分析にはほど遠いですね…
単純に解析量が足りないのか, データの質が悪いのか, 名詞, 動詞の出現頻度からでは感情はわからないのかもう少し考える必要がありそうです.
[今日の達成]
・失恋ソングの出現頻度の高い名詞, 動詞を抽出した
[今日の未消化]
・感情起因につながる単語はわからなかった