せっかくアカウントを作ったので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付近のものの解釈などかなり重要な情報も含まれます。