Google Cloud Natural Language APIを使って、Pythonで日本語文章の感情分析 (ポジティブ/ネガティブの判定) を行います。
このAPIは自然言語処理のためのGCPサービスで、感情分析以外にも、構文解析やエンティティ解析が提供されています。
準備
Google Cloud Natural Language APIを使い始めるには以下作業が必要です。
- Google Cloud Natural Language APIの有効化
- サービスアカウントのアクセスキーを取得
環境変数GOOGLE_APPLICATION_CREDENTIALS
にアクセスキーのパスを設定しておきます。
$ env GOOGLE_APPLICATION_CREDENTIALS=~/.gcp/credential.json
実装
Pythonでの実装に入っていきます。
まずはパッケージをインストールします。
pip install --upgrade google-cloud-language
Pythonでの実装は以下のとおりです。
- LanguageServiceClientを使ってAPIにリクエストする
- analyze_sentimentメソッドで感情分析を行う
- リクエストにDocumentオブジェクトを詰めることで文書を渡します
- PLAIN_TEXT以外には
TYPE_UNSPECIFIED
とHTML
があります
- PLAIN_TEXT以外には
- レスポンスのscoreにポジティブ/ネガティブの度合い、magnitudeに文章内でのポジティブ/ネガティブの振れ幅がそれぞれ格納されている
- scoreは-1.0〜1.0で、値が大きいほどポジティブ
今日は天気が良かったので散歩しにでかけた。
はscoreが0.6なので、ポジティブ寄りの文章と判定されます。
from google.cloud import language from google.cloud.language import enums from google.cloud.language import types # クライアントの作成 client = language.LanguageServiceClient() # リクエスト (解析する文書) の作成 text = """ 今日は天気が良かったので散歩しにでかけた。 """ document = types.Document( content=text, type=enums.Document.Type.PLAIN_TEXT) # APIをコールして結果を得る result = client.analyze_sentiment(document=document) print('score: {}, magnitude: {}'.format(result.document_sentiment.score, result.document_sentiment.magnitude)) # score: 0.6000000238418579, magnitude: 0.6000000238418579
試しに、自分のツイートからいくつか文章を拾ってscoreを見てみます。
下の文章だとscoreは-0.5で、ネガティブ寄りの判定。
ここ数日、起床時間がガチャガチャしてて、調子が良くない。 数日ならまだ良いけど、夜中に起こされることが常態化すると、不眠になったり、逆にまともに時間に起きられなくなったりするので、注意しないと。
下はscoreが0.3で、ややポジティブ寄りです。
頭の片隅でグズグズ渦巻いている悩みの一つを、消し去れた。 少し身が軽くなった気がする。
レスポンスのsentencesに文 (sentence) ごとのscoreが入っています。
for sentence in result.sentences: print(sentence.text.content, sentence.sentiment.score) # 頭の片隅でグズグズ渦巻いている悩みの一つを、消し去れた。 0.10000000149011612 # 少し身が軽くなった気がする。 0.6000000238418579