解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

python で単語感情極性対応表を使った感情分析〜失敗!?〜



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


前回の記事で『単語感情極性対応表』という辞書の使い方について練習しました。

今度は実際に使ってみます。



動作環境


Windows 7
・winpython 64bit 3.4.4



プログラム

ソースコード


#-*- encoding: utf-8 -*-
from pyknp import Juman
import pandas as pd
 
strlen = 10
 
###############################################################################
# 形態素解析
###############################################################################
 
# 形態素分析器 juman のインスタンス作成
juman = Juman(jumanpp=False)
 
# 形態素解析
text = '最近、痛ましい事件や事故のニュースが多い。'
result = juman.analysis(text)
 
# 形態素解析結果表示 および numpy 配列作成
print('*** 形態素解析結果 ***')
print('原文'.ljust(strlen, ' ') + '原形'.ljust(strlen, ' ') + '品詞'.ljust(strlen, ' ') + '分類'.ljust(strlen, ' '))
targetwords = []
for mrph in result.mrph_list():
    print(mrph.midasi.ljust(strlen, ' ') + mrph.genkei.ljust(strlen, ' ') + mrph.hinsi.ljust(strlen, ' ') + mrph.bunrui.ljust(strlen, ' '))
    targetwords.append(mrph.genkei)
print()
 
###############################################################################
# 単語感情極性解析
###############################################################################
 
# 単語感情極性対応表 のパスを設定する
filepath='C:\\Users\\UserName\\Desktop\\dictionary\\pn_table.txt'
print('*** 単語感情極性対応表 ***')
print('dictionary path = ' + filepath)
print()
 
# pandas で読み込む
pn_table = pd.read_csv(filepath, engine='python', encoding='shift_jis', sep=':', names=('Word','Reading','POS','PN'))
 
# 語のリスト と PN 値のリスト の作成
word_list = list(pn_table['Word'])
pn_list = list(pn_table['PN'])
 
# 語をキーとした PN 値辞書の作成
pn_dict = dict(zip(word_list, pn_list))
 
# 単語感情極性解析
print('*** 単語感情極性解析結果 ***')
for w in targetwords:
    if w in pn_dict.keys():
        print(w.ljust(strlen, ' ') + str(pn_dict[w]).ljust(strlen, ' '))
    else:
        print(w.ljust(strlen, ' ') + '無し'.ljust(strlen, ' '))
print()



結果


In [1]: runfile('C:/WPy64-3720/settings/.spyder-py3/jumanknptest5.py', wdir='C:/WPy64-3720/settings/.spyder-py3')
*** 形態素解析結果 ***
原文        原形        品詞        分類        
最近        最近        名詞        時相名詞      
、         、         特殊        読点        
痛ましい      痛ましい      形容詞       *         
事件        事件        名詞        普通名詞      
や         や         助詞        接続助詞      
事故        事故        名詞        普通名詞      
の         の         助詞        接続助詞      
ニュース      ニュース      名詞        普通名詞      
が         が         助詞        格助詞       
多い        多い        形容詞       *         
。         。         特殊        句点        
 
*** 単語感情極性対応表 ***
dictionary path = C:\Users\UserName\Desktop\dictionary\pn_table.txt
 
*** 単語感情極性解析結果 ***
最近        -0.0125929
、         無し        
痛ましい      -0.997224 
事件        -0.8599600000000001
や         -0.278384 
事故        -0.9970530000000001
の         無し        
ニュース      -0.391963 
が         無し        
多い        無し        
。         無し        
 
 
In [2]:



コメント

分析速度は悪くなかったと思います。

『最近』や『ニュース』がネガティブな数値を示しています。

辞書を見てみると、そんなにネガティブではない単語にネガティブな数値が与えられているモノが多数あります。

ポジティブとネガティブの閾値など、単語感情極性対応表をもっと理解する必要がありそうです。



以上