感情を把握するために、単語感情極性対応表を用いたサンプルを作ってみる
Textで保存して、csv化する
次にMeCabで形態素解析をして、名詞、動詞、形容詞のみ取り出す
これらを単語感情極性対応表と照らし合わせる
値が正ならポジティブな感情として
値が負ならネガティブな感情として
アナログ値を加算し、数をカウントする
やってみると、まったく使えない
最もわかりやすい例としては、否定形で書いているのに、単語だけでポジネガ判定をするので、逆の判定となる
このあたりはこの記事でよくまとまっている
感情分析自体は必須ではないが、例えば感情に合わせてキャラクタの表情を変えるようなことは是非実装したい機能だ
必須ではないが、楽しみな課題と考えられる
Pythonソースコード
# 単語感情極性対応表の読み込み
import csv
pn_ja_dic = {}
fp = open("Downloads/pn_ja.dic.csv","rt")
reader = csv.reader(fp,delimiter = ",")
for i, row in enumerate(reader):
word = row[0]
affection = row[3]
pn_ja_dic[word] = affection
#print(word,affection)
# 入力した文に対して、単語感情極性対応表により、ポジティブ、ネガティブな言葉のリストと、出現回数と合計値を出力
def pn_judge(input_str):
posi_count = 0
nega_count = 0
zero_count = 0
posi_level = 0
nega_level = 0
macab_result = tagger.parseToNode(input_str)
while macab_result:
if macab_result.feature.split(",")[0] == "名詞" or macab_result.feature.split(",")[0] == "動詞" or macab_result.feature.split(",")[0] == "形容詞":
word = macab_result.feature.split(",")[6]
if word in pn_ja_dic:
value = float(pn_ja_dic[word])
if value > 0:
posi_count += 1
posi_level += value
print(word," POSI ",value)
elif value < 0:
nega_count += 1
nega_level -= value
print(word," NEGA ",value)
else:
zero_count += 1
print(word," ZERO ",value)
else:pass
macab_result = macab_result.next
return(posi_count,nega_count,zero_count,posi_level,nega_level)
import MeCab
tagger = MeCab.Tagger()
sample_text = "昨日の試合で勝利できなかった"
print(pn_judge(sample_text))
Comentários