「Google Cloud natural Language」で感情分析してみる!

みなさんこんにちは!
イザナギです!
最近なのですが、Nuxtでアプリを作りながら並行でPython分析学習しております。
今まで、RubyとかJavaScriptとかを触ってきた分、Pythonは初め違和感を覚えますね。
本当に個人的な感想なのですが、endとか「}」などで文を囲まないのが、違和感でした。
しかし、ライブラリがしっかりしているので、慣れれば結構使いやすいですね!
さて!今回はタイトルにもあるとおり、「感情分析」をおこなっていきたいと思います!

感情分析とは!

簡単にいうと「感情分析」とは、テキストから感情などを読み取ることです。
なので、Twitterなどのツイートを相手がどんな気持ちでツイートしているか分析できるわけですね。
調べてみると、感情分析できるAPIはいろいろあるみたいですね。
テキストの感情分析をするためのクラウドサービス比較(2018年版) - Qiita
その中で、今回は日本語対応している「Google Cloud natural Language」を使ってみたいと思います!

Google Cloud natural Languageとは?

こちらも「感情分析API」ですね。
Google Cloud PlatformにてAPIキーを取得すれば、簡単に使えるようになります。
感情を表すものとして「score」「magnitude」があります。
公式サイトにも書いてありますが、私の方でも簡単に説明していこうと思います。

「score」について

「score」は感情を表しています。
1.0 ~ -1.0の数字で表され、正の数字であればポジティブ負の数字であればネガティブとなります。

「magnitude」について

「magnitude」は感情の高まりを表しています。
数値は0以上で表されます。
どんな時に使うのかというと「score」が0に近かった時に
ポジティブとネガティブがテキスト内に混合していることを確認するために使用するそうです。
例えば「score」が0.0「magnitude」が5.0のときは混合しており、「score」が0.0「magnitude」が1.0なら混合はしていないということになるそうです。

早速使ってみる!

では早速使ってみましょう!
ちなみに、今回作成したファイル構成は以下の通りです。

  • 親フォルダ
    • data
    • data.csv
    • pythonファイル(実行用)
  • config.py

import json, config #標準のjsonモジュールとconfig.pyの読み込み
import requests
# gcp感情分析
def emotion(text_emotion):
    #APIキーの取得
    key = config.gcp_api_key
    url = 'https://language.googleapis.com/v1/documents:analyzeSentiment?key=' + key

    header = {'Content-Type': 'application/json'}
    body = {
        "document": {
            "type": "PLAIN_TEXT",
            "language": "JA", #テキストの種類(ENにすれば英語を解読できる)
            "content": text_emotion #ここに感情分析するテキストを挿入
        },
        "encodingType": "UTF8"
    }

    #json形式で結果を受け取る。
    response = requests.post(url, headers=header, json=body).json()

    #magnitudeとscoreを返す
    return [response["documentSentiment"]["magnitude"],response["documentSentiment"]["score"]]

これで感情分析ができるようになります。

テキストをTwitterから取得して、実行したやつをファイルにしてみました。(テキストは複数入れてます。)
総合スコアというものが、感情を表していています。
総合マイグレーションは感情の強さです。

直近50件ほどツイートを取得して、「score」をグラフにしてみました。
この人の場合だと、感情の振れ幅が大きいですよね。
他の人も検証してみましたけど、みなさんこんな感じでした。
基本的に振り幅が高くなるのでしょうか?(私の選んだ人が悪かったのかな?)

まとめ

今回は「Google Cloud natural Language」で感情分析してみました。
個人的な感想なのですが、分析したテキストを見る限りあってると思うものもあれば、ないと感じるものもありました。
さらに検証していく必要がありそうですね。
また何かありましたら、記事にしていきたいと思います。
それでは、今回はここで筆を置かせていただきます。
最後まで記事をご覧いただきありがとうございました!

参考

PythonでGoogle Natural Language APIを叩いて感情分析 | AVILEN AI Trend wrap a-wrap cf
Natural Language API の基本  |  Google Cloud

■関連記事(精度そんな良くないかもwww)

■関連トピック

2024 - Izanagi's Site