29
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LINE BOT + Cloud Natural Languageで感情分析してみる (Google App Engine(GAE) + Python3.7 + LINE Message API + Google Cloud Natural Language API)

Last updated at Posted at 2018-11-29

#■はじめに

Google App Engine(GAE) + Python3.7 + LINE Message API + Google Cloud Natural Language API を使用して、LINE BOTを作成しましたので、その手順を投稿します。
image.png

各手順は画面キャプチャーとコメントを記載してますので、手順に沿って作業すれば、どなたもLINE BOTが作成できると思います。
(あわせて、作ったアプリの後片付けも記載してます)

※本投稿は2018年11月時点のものになります
(Cloudサービスは日々かわりますので、いつ時点の情報と書いていておきます)

#■本投稿の背景
Google Cloud Platform で、何かできることはないかを探してたら、
Google Cloud Natural Language というものがありました。
 ・https://cloud.google.com/natural-language/

感情分析は、テキスト内で表現されている全体的な態度(ポジティブかネガティブか)を特定します。
score: -1.0(ネガティブ)~1.0(ポジティブ)のスコアで感情が表されます。これは、テキストの全体的な感情の傾向に相当します。
 ・https://cloud.google.com/natural-language/docs/basics

簡単な動作確認は https://cloud.google.com/natural-language/ で確認ができます。
image.png

◆実行してみる
image.png

これを使用すれば、
嫁からのLINEが来て、このメッセージ怒っているのか?と判断できると思い、
Google App Engine(GAE) + Python3.7 + LINE Message API + Google Cloud Natural Language API を使用してLINE BOTを作成しました。

#■やることのイメージ
嫁からのLINEが来た場合、メッセージをLINE BOTに転送(or メッセージを貼り付け)、感情分析をしたい。
⇒相手のLINEメッセージを感情分析して-100点~100点の範囲で結果を返します
  image.png

ガンツ先生 が得点とアドバイスを返します。
※ガンツ先生はロボコンにでてくるキャラクターで、ロボコンの行動に点数をつける先生です
点数は 0点~100点をつけていたと思います。

Cloud Natural Language APIから返る値は、-1.0 ~ 1.0 なので、
x100 にして、あたかもガンツ先生が採点しているかのようにします。
(100点が最高にポジティブ(機嫌がよい)、-100点が最高にネガティブ(機嫌が悪い))

#■構成図
image.png

LINE BOTを動かす環境は、Google Cloud Platform の Google App Engine(GAE) を使用します。

Google App Engine(GAE) は、
Google Cloud Platform 上でアプリケーションを作り、実行できるようにする PaaS
( Platform as a Service )です。
⇒環境(たとえばPythonのインストールが実施済み)が設定されている状態で使用できます

また、Google App Engine、 Google Cloud Natural Language は制限を越えなければ無料です。
※2018年7月から Python3.7が Google App Engine のスタンダード環境で実行できるようになりました。

#■やること
以下のステップを実施します。

** 1. Google Cloud Platform 申し込み**
** 2. Google Cloud Platform プロジェクトの作成**
** 3. Google Cloud Natural Language APIを有効にする**
** 4. LINE Message API 申請**
** 5. Python+設定ファイル作成**
** 6. Google App Engine(GAE) にデプロイ**
** 7. LINE 設定**

##1. Google Cloud Platform 申し込み

Google Cloud Platform の申し込みはこちら参照させて頂きました
Google Cloud Platform(GCP) 無料トライアルの開始方法

##2. Google Cloud Platform プロジェクトの作成
https://console.cloud.google.com/?hl=ja
にアクセスして、新規プロジェクトを作成します。

1.新規プロジェクトを作成します
image.png
image.png
image.png
image.png
image.png

##3. Google Cloud Natural Language APIを有効にする
作成したプロジェクトでCloud Natural Language APIが使えるように設定します。

image.png

image.png
image.png
image.png
image.png

有効になっていればOK
image.png

使用料金は個人で使う分には問題ないです。
image.png

ユニットって何?については以下のURLに説明されてます。
https://cloud.google.com/natural-language/pricing 

ドキュメントの文字数が 1,000 文字を超えている場合、1,000 文字ごとに 1 件のテキスト レコードとしてカウントされます。たとえば、Natural Language API に送信する 3 件のリクエストそれぞれに、800 文字、1,500 文字、600 文字が含まれている場合、1 番目のリクエスト(800)が 1 件、2 番目のリクエスト(1,500)が 2 件、3 番目のリクエスト(600)が 1 件、合計 4 件のテキスト レコードとして課金されます。

⇒1ユニットはAPIコール回数で、1000文字超えるとコール回数が加算されるということかと

#4. LINE Message API 申請
LINE developers で API申請を行います。
※幾つも他記事でありますが、画面が若干変わっていたので書きます。※本投稿は2019年11月時点のものになります
 ・https://developers.line.biz/ja/

##4-1.ログイン
LINE developersにログインします。LINEアプリでメールアドレス、パスワードを設定していない場合は
登録します。
image.png
image.png
image.png

##4-2.開発者登録
LINEアプリで設定している情報が表示されるので、変更することなく登録します
image.png
image.png

##4-3.新規プロバイダ登録
APIを使用するにあたり必要な設定。プロバイダ名はなんでもかまいません
image.png
image.png
[作成する]ボタンをクリックすると、プロバイダが作成されます
image.png

##4-4.新規チャネル登録
LINEBOTの設定をします。
image.png
image.png

image.png
image.png
image.png
##4-5.アクセストークンを取得
PythonスクリプトにLINE Message API のアクセストークンが必要になりますので再発行します。
image.png
image.png

画面を下におくり、「アクセストークン(ロングターム) 」を[再発行]ボタンをクリックして取得します。
※Pythonスクリプトで設定します
image.png
image.png
image.png

##4-6.Channel Secretを取得
チャネルの基本情報のChannel Secret があるのでこちらも控えておきます。
※Pythonスクリプトで設定します
image.png

#5. Python+設定ファイル作成
Google App Engine(GAE) で動かすLINEBOTの Pythonスクリプト、設定ファイルを作成します。

ローカル環境(自分のPC)にプロジェクトフォルダ(今回はGAELINEBOT)を作成して、以下のフォルダ、ファイルを作成します

◆フォルダ構成
image.png

ファイル名 説明
lib Google App Engine が使用するライブラリを格納するフォルダ。ローカル環境ではフォルダのみ作成
app.yaml Google App Engine の設定ファイル(Google App Engineがpython3.7で起動とか、起動インスタンス数などを設定)
appengine_config.py サードパーティ製ライブラリを使用する際、lib フォルダに格納する設定
main.py LINEBotを動かすスクリプト
requirements.txt Google App Engineでインストールが必要なライブラリを記載

##5-1 lib
新規フォルダ作成のみ

##5-2 app.yaml
Python3.7を使用、Google App Engine(GAE) の起動設定を実施

app.yaml
runtime: python37

handlers:
  
- url: /.*
  secure: always
  script: auto
  
automatic_scaling:
  min_idle_instances: automatic
  max_idle_instances: 1
  min_pending_latency: 3000ms
  max_pending_latency: automatic

app.yaml は以下の記事を参考にしました。
App Engine Scaling Config

##5-3 appengine_config.py
LINEなどのサードパーティ製ライブラリを使用する際、Google App Engine(GAE) 側 lib フォルダに格納する設定

appengine_config.py

import vendor
vendor.add('lib')

##5-4 main.py
Pythonスクリプト

main.py
# coding: utf-8

import json
import os
import sys

#import logging
#logging.getLogger().setLevel( logging.DEBUG )

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types

import flask

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,ImageSendMessage
)

app = flask.Flask(__name__)

#CHANNEL_ACCESS_TOKEN
line_bot_api = LineBotApi('取得したLINE Message API の <アクセストークン(ロングターム)を設定>')
#CANNEL_SECRET
handler = WebhookHandler('<取得したLINE Message API のCANNEL_SECRET を設定>')

# Instantiates a client
client = language.LanguageServiceClient()


#返信メッセージを設定
msglst ={100:"全然問題ない!!!",
        90:"全然問題ない!!",
        80:"全然問題ない!",
        70:"問題ない!!!",
        60:"問題ない!!",
        50:"問題ない!",
        40:"大丈夫",
        30:"たぶん大丈夫",
        20:"まだ大丈夫",
        10:"もう少し大丈夫",
        0:"ギリギリ大丈夫",
        -10:"様子見しますか",
        -20:"もう少し様子見しますか",
        -30:"あと少し様子見しますか",
        -40:"少し機嫌が悪いかも。落ち着こう",
        -50:"機嫌が悪いかも。何かしたか思い出せ",
        -60:"ちょっとやばいかも。。",
        -70:"少しフォロー必要かも",
        -80:"フォロー必要",
        -90:"早くフォロー!",
        -100:"まずは謝る"
    }

@app.route("/")
def hello():
    return "hello this page is nothing."


@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = flask.request.headers['X-Line-Signature']

    # get request body as text
    body = flask.request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        flask.abort(400)

    return 'OK'

@handler.add(MessageEvent, message = TextMessage)
def handle_message(event):



    text = event.message.text
    
    document = types.Document(
    content=text,
    type=enums.Document.Type.PLAIN_TEXT)
    
    # Detects the sentiment of the text
    sentiment = client.analyze_sentiment(document=document).document_sentiment
    
    #score = round(sentiment.score, 1)
    score = int(sentiment.score * 100)
    ret = 'Sentiment: {}, {}'.format(sentiment.score,score)
    
    textresponse = str(score) + "\n" + msglst[round(score,-1)]
    
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=textresponse))


if __name__ == "__main__":
    app.run()

##5-5 requirements.txt
Google App Engine(GAE)でインストールが必要なライブラリを記載
※今回はline-bot-sdk、flask、google-cloud-language を使用するので、ライブラリを指定します

requirements.txt
line-bot-sdk
flask
google-cloud-language

#6. Google App Engine(GAE) にデプロイ
Google App Engine にデプロイします。
※ローカル環境(自分のPC)でプログラム作成して、Google App Engine にデプロイする場合、Google Cloud SDKをインストールする必要があります。
image.png

※私の環境は Windows7(64bit) + Anaconda5.2-Python 3.6 version の環境での手順になります

この章では、Google App Engine のアプリケーション作成、Google Cloud SDK のインストール と Google App Engine(GAE) へのデプロイ方法を記載します。

##6-1 Google App Engine アプリケーション作成

https://console.cloud.google.com/ にアクセスして[App Engine]をクリックします
image.png

アプリケーションを作成
image.png

リージョンを選択
image.png

環境を選択
※今回は言語はPython 、環境は基本無料の[標準]を選択
image.png

App Engineが作成されることを確認
image.png

##6-2 Google Cloud SDKのインストール
ダウンロードボタンをクリック
image.png

インストールボタンをクリック
image.png

インストール.exe をダウンロード
GoogleCloudSDKInstaller.exe がダウンロードされます
image.png

GoogleCloudSDKInstaller.exe を実行します。
[Next]をクリック
image.png

[I Agree]をクリック
image.png

[All users]を選んで[Next]をクリック
image.png

インストールパスはそのままで、[Next]をクリック
image.png

オプションはそのままで、[Install]をクリック
image.png

インストールは結構かかったので辛抱してまつ。終ったら[Next]をクリック
image.png

[Finish]をクリック
image.png

すると、Dos窓が起動してくるので、[Y] + [Enter]
image.png

ブラウザが開くので、[許可]をクリック
image.png

認証が完了した画面が表示されます
image.png

デスクトップに Google Cloud SDK Shell のショートカットが作成されてます
※このショートカットで SDKの設定・デプロイをします

image.png

Google Cloud SDKで Google App Engineにある、どのプロジェクトを使用するかを設定

##6-3 Google App Engine(GAE)へのデプロイ

デプロイは自分のPC(ローカル環境)から Google App Engine(GAE)へ Google Cloud SDKを使用してデプロイします。

Google Cloud SDK Shell のショートカットをクリックします。
image.png

gcloud init と入力して、new setting [1] を選択
image.png

使用するアカウントを選択(Google Cloud SDKで設定したアカウントが表示されているので、そのアカウントを選択)
image.png

デプロイ先のプロジェクトを選択
image.png

image.png

Google Cloud SDK のパスを スクリプト格納先へ移動する

今回は、Pythonなどのファイル群を、「D:\Python\GAELINEBOT」に格納してますので、そのサンプルで説明します。
image.png

gcloud app deploy を入力して、Google Cloud SDK でデプロイ。
image.png

デプロイ先のURLを取得します。
image.png
※このURLを LINE Message API に設定します

#7. LINE Message API 設定
Google App Engine(GAE) のデプロイ先URLを LINE Message APIに設定します
image.png
image.png

画面を下におくり、「Webhook URL」を設定します。
[編集]ボタンをクリックして、
Google App Engine(GAE) のデプロイ先URL/callback と設定します
image.png

自動応答メッセージを「利用しない」、友達追加あいさつを「利用しない」と設定します
image.png

LINEアプリQRコードを携帯に読込ませます
◆◆◆1月9日に、停止しました。◆◆◆
image.png

#LINE BOT動作確認

嫁からのLINEメッセージをガンツ先生に転送 or メッセージのコピペしてみる
 image.png

点数とコメントが返信される

できた!

#不要なGoogle App Engine(GAE)アプリケーションの無効化/プロジェクトの削除
使わなくなったGAEアプリケーション/プロジェクトは止めておきましょう。
※意図せず課金されるのを防ぐためです

##Google App Engine(GAE) アプリケーションの無効化
https://console.cloud.google.com/ にアクセス

image.png

アプリケーションを無効化
image.png

アプリIDを入力して無効化
image.png

アプリケーションの無効化を確認
image.png

##Google Cloud Platformプロジェクトの削除
削除するプロジェクトを選択します。
(現在、削除するプロジェクトになっている場合、プロジェクトの選択はしなくてOKです)
image.png
image.png
image.png

削除するプロジェクトのホーム画面を表示させる
image.png
image.png
[シャットダウン]をクリック
image.png
プロジェクトIDを入力してシャットダウン
image.png
シャットダウンして1ヶ月後に完全に削除されるメッセージを確認して[OK]ボタンをクリック
image.png
削除されたプロジェクトが一覧から消えていることを確認
image.png

プロジェクトを削除するのが無難かと思います。

#最後に

オチとして嫁からのLINEを振り返って確認すると、
「敬語のLINEメッセージは100% 怒っている」 事に気がついたので、LINE BOT作成しなくてもよかったかもしれません。。

Google App Engine(GAE)、Google Cloud Natural Languageは無料枠で使用しているので、
しばらくLINEBOTは起動しておきます。

※事情により停止する事がありますのでご了承ください

29
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?