やりたいこと
GCPのNaturalLanguageAPIをローカルから実行して触ってみる。
実行環境
- macOS Catalina 10.15.5
- Python 3.7.4
環境構築
APIを有効にする
「Natural Language API」で検索すると、MARKETPLACEの欄に「Cloud Natural Language API」が出てきます。
サービスアカウントの設定
NaturalLanguageAPI用のサービスアカウントを作成します。
「IAMと管理」→「サービスアカウント」→「サービスアカウント作成」から、以下のようなサービスアカウントを作成します。
項目 | 内容 |
---|---|
サービスアカウント名 | natural-language-api-test |
サービスアカウントの説明 | NaturalLanguageAPIテスト用 |
このサービスアカウントにプロジェクトのアクセスを許可する | 設定しない |
ユーザーにこのサービスアカウントへのアクセスを許可 | 設定しない |
作成したサービスアカウントの編集画面から「キー」→「鍵を追加」→「新しい鍵を作成」を選びます。
形式をJSONにして鍵を作成し、ローカルにダウンロードします。
ローカルの設定
先程ダウンロードしたJSONファイルのパスを通します。
# Macの場合
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/hoge.json"
クライアントライブラリをインストールします。
pip install --upgrade google-cloud-language
感情分析
Natural Language APIでできる分析のうち、今回は感情分析を行ってみます。
以下のようなPythonスクリプトを作成し、実行します。
from google.cloud import language_v1
client = language_v1.LanguageServiceClient()
document = {"content": "今日はいい天気だ。だが、寒くて震えそうだ。", "type_": "PLAIN_TEXT"}
response = client.analyze_sentiment(request = {"document": document})
print(response)
こちらの結果は以下のようになりました。
document_sentiment {
magnitude: 1.100000023841858
score: 0.10000000149011612
}
language: "ja"
sentences {
text {
content: "\344\273\212\346\227\245\343\201\257\343\201\204\343\201\204\345\244\251\346\260\227\343\201\240\343\200\202"
begin_offset: -1
}
sentiment {
magnitude: 0.699999988079071
score: 0.699999988079071
}
}
sentences {
text {
content: "\343\201\240\343\201\214\343\200\201\345\257\222\343\201\217\343\201\246\351\234\207\343\201\210\343\201\235\343\201\206\343\201\240\343\200\202"
begin_offset: -1
}
sentiment {
magnitude: 0.4000000059604645
score: -0.4000000059604645
}
}
- document_sentiment
- magnitude: 1.1
- score: 0.1
- language: "ja"
- sentences
- text
- content: 省略
- bigin_offset: -1
- sentiment
- magnitude: 0.7
- score: 0.7
- text
- sentences
- text
- content: 省略
- bigin_offset: -1
- sentiment
- magnitude: 0.4
- score: -0.4
- text
「document_sentiment」は、すべての文章を通しての感情分析で、2つの「sentences」は、それぞれ「。」で区切られた2つの文章の感情分析となっています。
「magnitude」は感情の強さ、「score」は感情のポジティブ・ネガティブ(ポジティブが正)を表しています。