ヱヴァンゲリヲン新劇場版:序のシンジのセリフをテキスト感情分析して心情の変化を可視化する


 エヴァンゲリオンシリーズを文字起こししているサイトを見つけたので、そこからヱヴァンゲリヲン新劇場版:序のシンジのセリフを抜き出して、それを感情分析にかけてシンジの心情の変化を可視化してみようと思います。

 使用したサイトは以下になります。

 まずは、ここからシンジのセリフのみを抜き出します。結構、手間がかかるので、興味のない作品だったら結構シンドイと思います。

 抜き出したものはeva_shinji.txtに保存します。ネタバレや著作権等もあるので、抜き出した内容についてはここでは触れません。

感情分析について

 感情分析にはいろいろなライブラリやサービスがありますが、今回は手軽に使えて否定句も判定してくれるpythonのライブラリosetiを使ってみようと思います。

 osetiのについては作者が書いた以下の記事を参考にしてみて下さい。

 ちなみに私も感情極性辞書を使って感情分析処理を作った記事を過去に投稿しています。

ソースコード

 それではソースコードです。

import matplotlib.pyplot as plt
import oseti
import re

def remove_sign(text):
    # 一回のセリフ毎に計測したいので『。!?…』は『、』に変換しておく
    text = re.sub(r'[。!?…]', '、', text) 
    return text

def sentiment_analyze(filepath):

    input_data = []

    analyzer = oseti.Analyzer()

    with open(filepath, 'r', encoding='utf-8') as f:
        input_data = f.read()

    input_data = input_data.splitlines()
    input_data = [''.join(input.split()) for input in input_data]

    pos_list = []
    neg_list = []
    score_list = []

    for line in input_data:
        line = remove_sign(line)
        dic = analyzer.analyze_detail(line)[0]
        pos_list.extend(dic['positive'])
        neg_list.extend(dic['negative'])
        score_list.append(dic['score'])

    print("positive word")
    print(pos_list)
    print("negative word")
    print(neg_list)
    # print(score_list)

    x = list(range(len(score_list)))
    y = score_list
    fig, ax = plt.subplots()
    plt.xlabel('line')
    plt.ylabel('sentiment score')
    ax.plot(x, y)

sentiment_analyze('eva_shinji.txt')

実行結果

positive word
['大事', '嫌-NEGATION', '出来る', '訳 無い', '出来る', '大丈夫', 'いい', '悪い-NEGATION', 
'目標', '目標', '目標', '目標', '勝つ', 'いい', 'いい', 'ため', 'いい', 'いい', 'いい', 
'忘れる-NEGATION', '平気', 'かなう', '負ける-NEGATION', 'いい', 'しょうが ない-NEGATION', 
'嫌-NEGATION', 'いい', '安全', '死ぬ-NEGATION', '価値', '絆', '大事', '大丈夫', 'いい']
negative word
['無理', 'しょうが ない', '無理', '嫌', 'ダメ', 'ダメ', 'ダメ', 'ダメ', 'ダメ', '邪魔', 
'慣れる-NEGATION', '嫌', 'うつ', '嫌う', '駄目', '駄目', '駄目', '良い-NEGATION', 
'自由-NEGATION', '無理', '怪我', '怪我', '暴走', '危ない', '嫌', 'うまい-NEGATION', 
'失敗', '嫌う', '死ぬ', '嫌', 'ため-NEGATION', '出来る-NEGATION', 'つらい', '敵', 
'ピンチ', 'うまい-NEGATION', '自信-NEGATION', '悲しい']

 y軸はプラスがポジティブ、マイナスがネガティブです。osetiの特徴として短い文章だと、-1, 0, 1がscoreとして返ってくる事が多いです。
 (※私の手動によるセリフ抜き出しが誤っていて、同じようにやっても結果はこの通りにならないかもしれません。)

考察

 考察はネタバレを含むので折りたたんでます。

 見たければ左の三角マークをクリック

 
 序盤は基本的にシンジが周りに対して当たり障りのないニュートラルなセリフが多い。その中でも父である碇ゲンドウとのファーストコンタクトシーン(line 20あたり)は大きく心情が揺れ動く。
 中盤から後半にかけては、シンジも少しずつ感情を出すようになるが、鈴原トウジとの接触(line 60あたり)以降、ややネガティブな発言が多くなる。
 終盤の綾波レイとの会話(line 120あたり)でようやくポジティブな発言が続けて出てくる。

 まあ、なんとなく作品を見たイメージに近いかな。

 ちなみにセリフは「はい」系のものが多く20回あった。

 
 
 
 

結論

 映像作品ならセリフをテキスト感情分析するよりも、作品をちゃんと見たほうがキャラの心情の変化はよく分かる。

 破、Q、シン・エヴァンゲリオンならもっとシンジの心情の変化が見れそうだけど、面倒くさいので多分やりません。興味があったらやってみて下さい。