毎日テキストマイニング

180日間、毎日テキストマイニングをするブログ

2018/7/12【20日目】各Tweetをネガポジ判定で得点化していく

昨日、各単語にスコアを割り当てることができましたので、そのスコアを合計し、tweetの内容を得点化したいと思います。

実装

辞書に単語があればスコアを返し、単語がなければ0を返すようにします。それで貯まった数値をsum関数で合計すればいいのではないでしょうか? 早速やってみます。

for tango_list in kaigyou:
    tab = tango_list.split('\t')
    if tab[0] in npjp_dic:
        pn_score = npjp_dic[tab[0]]
    else:
        pn_score = 0
    total = sum(pn_score)
    print(total)

実行結果。

TypeError: 'numpy.float64' object is not iterable

とのエラーが出ました。intで出力してるので型が違うというエラーですね。 sum関数はリストにしか使えないようなので、空のリストを作って、そこにスコアを加えていきたいとおもいます。 リストに加えてるのはappendメソッドでできるみたいです。

total_score = []
for tango_list in kaigyou:
    tab = tango_list.split('\t')
    if tab[0] in npjp_dic:
        pn_score = npjp_dic[tab[0]]
        total_score.append(pn_score)
    else:
        pn_score = 0
        total_score.append(pn_score)
total = sum(total_score)
print(total)

こんな感じですね。 実行してみます。

0.510335

お、ちゃんとスコアが合計されていますね。これを元にコードに落としていきます。 Tweet毎に点数化するためにtweet毎に処理をさせるのにfor文を2回繰り返しています。

import numpy as np
import pandas as pd
import MeCab

#辞書読み込み
npjp = pd.read_csv('./akb_dic/np_jp.dic',
                   sep=':',
                   encoding='utf-8',
                   names=('Tango','Yomi','Hinshi', 'Score'))

#辞書の処理
tango_retu = npjp['Tango']
score_retu = npjp['Score']
npjp_dic   = dict(zip(tango_retu, score_retu))

#Mecabの処置
tagger = MeCab.Tagger ("")

#ファイルの読み込み
text = open('20180712.csv', 'r')
#Tweet毎に分ける
kaisekiyou = text.read().split('"\n"')

#解析処理
for tweet in kaisekiyou:
    kaisekiyou = tweet.split('¥n')
    string = ' '.join(kaisekiyou)
    mecab = tagger.parse(string)
    kaigyou = mecab.splitlines()
    #点数を入れるリスト
    total_score = []
    #点数化する処理
    for tab in kaigyou:
        if tab[0] in npjp_dic:
            pn_score = npjp_dic[tab[0]]
            total_score.append(pn_score)
        else:
            pn_score = 0
            total_score.append(pn_score)
    total = sum(total_score)
    print(total)

実行結果

-1.314913
-2.322276
-13.811504
-0.979874
-6.889323
-6.887294
-7.942896
-8.046193
0.137454
-3.304033

うまくできましたが、ほぼマイナスですね。辞書は専用のものを作らなきゃダメそうですね。 明日は辞書を作って、その後は統計学をやって行きたいと思います。

今日の結果

今日のAKBによる呟きは30件でした。 せっかくですので、30件の呟きをネガポジ判定をしてみます。 次の通りです。

rio_rin48 -4.882402
omorimyu_pon -12.697437
ooyachaaan1228  -0.987308
okadanana_1107  -3.256041
okadanana_1107  -1.797897
sayaya_0388 -11.674557
Sakii_Kitazawa  -1.318631
912_komiharu  -6.867543
912_komiharu  -5.927789
yukari__0828  -3.84163
ki_cyaco48  -1.206164
akb48kururun  -1.121993
kayoyon213  -6.767217
kayoyon213  -3.459053
kayoyon213  -1.621949
48manaka_16 -2.344892
makiho_1019 -2.953603
o_megu1112  -4.233349
seina_fuku48  -1.607502
seina_fuku48  -2.51396
seina_fuku48  -9.200459
macyacyarin -10.285419
akb4816ayaka  -2.188088
mionnn_48 -7.051921
muto_orin -0.153431
yuirii_murayama 0.050647
yuirii_murayama -3.653443
ayuchan0203 0.143026
ayuchan0203 -0.94254
ami_15chans -3.621164

軒並みネガティブ判定を叩き出している中で、2人だけポジティブなメンバーがいますね。

ギリギリポジティブな呟きは下記の2つです。

すごい美人さん??‍♀️❤️ https://t.co/zT8rIY1Hvy
------
#魔法先生ネギまのゲネプロを見てきました!!
はっつの演技はすごい新鮮で歌声とかも素敵だったなぁ✨ゲネプロ終わってから会った時はいつものはっつに戻っててそれがまた可愛かった?♥︎ https://t.co/ePevk7YgfN

確かにポジティブですね。

今日勉強したこと

  • 二重ループ