GCPのCloud Natural Language API でセンチメント分析

せっかくアカウントを作ったのでGCPでテキストのセンチメント分析(ポジネガ)を試してみます。
Python ライブラリも用意されている様なのですが、最初なのでAPIを直接叩いてみました。

こちらに、 curl コマンドを使う例があり、これを参考に、pythonで書きなおしてみます。


curl -X POST \
     -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
     -H "Content-Type: application/json; charset=utf-8" \
     --data "{
  'encodingType': 'UTF8',
  'document': {
    'type': 'PLAIN_TEXT',
    'content': 'Enjoy your vacation!'
  }
}" "https://language.googleapis.com/v1/documents:analyzeSentiment"

今回は認証はAPIキーで行うので、URLにクエリパラメーター(key={APIキー})で流けることに注意しながら、pythonでやってみました。


# サンプルテキスト
text = (
    "メロスは激怒した。必ず、かの邪智暴虐の王を除かなければならぬと決意した。"
    "メロスには政治がわからぬ。メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。"
    "けれども邪悪に対しては、人一倍に敏感であった。"
    "きょう未明メロスは村を出発し、野を越え山越え、十里はなれた此のシラクスの市にやって来た。"
)

# 自分のAPIキーに置き換える
apl_key = "{自分のAPIキー}"

# APIのurl情報
url = 'https://language.googleapis.com/v1/documents:analyzeSentiment?key=' + apl_key

# ヘッダーとデータの設定
header = {'Content-Type': 'application/json'}
data = {
    "document": {
        "type": "PLAIN_TEXT",
        "content": text
    },
    "encodingType": "UTF8"
}

response = requests.post(url, headers=header, json=data).json()

# 結果表示
response
"""
{'documentSentiment': {'magnitude': 1.2, 'score': 0},
 'language': 'ja',
 'sentences': [{'text': {'content': 'メロスは激怒した。', 'beginOffset': 0},
   'sentiment': {'magnitude': 0.1, 'score': -0.1}},
  {'text': {'content': '必ず、かの邪智暴虐の王を除かなければならぬと決意した。', 'beginOffset': 27},
   'sentiment': {'magnitude': 0.3, 'score': 0.3}},
  {'text': {'content': 'メロスには政治がわからぬ。', 'beginOffset': 108},
   'sentiment': {'magnitude': 0.5, 'score': -0.5}},
  {'text': {'content': 'メロスは、村の牧人である。', 'beginOffset': 147},
   'sentiment': {'magnitude': 0, 'score': 0}},
  {'text': {'content': '笛を吹き、羊と遊んで暮して来た。', 'beginOffset': 186},
   'sentiment': {'magnitude': 0, 'score': 0}},
  {'text': {'content': 'けれども邪悪に対しては、人一倍に敏感であった。', 'beginOffset': 234},
   'sentiment': {'magnitude': 0, 'score': 0}},
  {'text': {'content': 'きょう未明メロスは村を出発し、野を越え山越え、十里はなれた此のシラクスの市にやって来た。',
    'beginOffset': 303},
   'sentiment': {'magnitude': 0, 'score': 0}}]}
"""

ドキュメント全体としての、magnitudeとscoreに加えて、文ごとにもそれぞれ表示してくれているのがありがたいですね。
(わかりにくいですが、textは全部連結されて一つの文字列になっているので、GCPが自動的に分けてくれたものになります。)

‘メロスは激怒した。’ の score -0.1 より、
‘メロスには政治がわからぬ。’ の score -0.5 の方がネガティブと判定されているのですね。

結果の解釈については、
感情分析の値の解釈
という文書があるのでこちらを読んでおきましょう。
スコアが0.0付近のものの解釈などかなり重要な情報も含まれます。

カテゴリーGCP

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です