Calendarの17日目の記事です。弊社のSlackにはユーザーからのコメントが届くチャンネルがあります。NewsDigestの「ご意見・ご要望」画面から投稿されるフィードバックコメントの4種類で、日々開発の参考にさせて頂いております。頂いたご意見の中には当然好意的な意見と否定的な意見両方があるのですが、その度合いを数値として残しておければ分析の役に立つのではと思い、Botを作成したので記事として公開します。Slackチャンネルで流れていくだけでは勿体無いので、コメントを蓄積してしたいの二点になります。SlackBotをHerokuにデプロイさせた理由という事でBotを作ろうと思ったのですが、正直自分はAndroid開発以外のことは皆無でして、どこからどう始めたらいいのか分かりません。そこで考えたのは今想定されるユースケースと自分の環境から最適解を見つけ出していこう、というものでした。その道のエキスパートが沢山いらっしゃるので、ここは相談しやすさを重視です。前述の通り、コメントはSlackに流れてくるのですからBotはSlackから効率良く取得できるものでありたいです。Python3系をサポートしていることから、Slackbotライブラリがチョイスされました。作ったBotはデプロイしないことには動いてくれません。当たり前ですがいつまでもローカル環境で動かしていては自宅の電気代も勿体無いです。ここはCTOに相談したところHerokuを推して頂きました。動作させる事が確定です。感情分析をどう扱うのか(APIの選定)次はある意味心臓部にあたる、感情分析をどうするか、という点について。Platformのサービスがあります。APIでアクセスする事が出来て、感情分析結果を取得する事が出来るものです。ネガティブコメントを投げると上記の範囲でレスポンスを返却してくれるので、ネガポジの度合いを絶対値で判断する事が出来ます。Platform側で担保する。これでレビュー解析Botは形になりそうです。コメントの通知を受け取れるようにデコーダを実装させます。message.bodySlackBotライブラリに用意されている@listen_toデコーダで投稿されたMessage全体を受け取ります。その中からbodyを部分を取り出して感情分析にかけたいユーザーコメントを取得します。Androidレビュー/フィードバックiOSレビュー/フィードバックの4パターンのコメントが投稿されるので、取得したbodyの内容で判別の上、適切な形で取り出したうえでGoogle感情解析APIに投稿します。API(感情分析API)の登録を完了させるとAPIキーを発行する事が出来ます。Heroku側でダッシュボード内でAPIキーを環境変数として登録しておく事で、Botがデプロイ環境で感情分析APIを扱うことが出来るようになります。client.analyze_sentiment(document=document).document_sentimentsentiment.scoreで感情分析のスコアを取り出すことが出来ます。1.0の範囲で返却されますが、端数になりがちなので小数点以下で四捨五入しておきます。message.reply()で投稿されたSlackメッセージに対してスレッド返信を行えます。スコアが正の値ならポジティブ、負の値ならネガティブなので対応した絵文字でSlackのユーザーコメントにリアクションをしてみます。in_thread=True)message.react(negaposi(rounded_score))解析結果ポジティブネガティブポジティブコメント「地震情報が素早い世界中の情報が分かる」はポジティブな意見そうですが、実際のスコアが0.7と判定されており、感情分析結果としてもポジティブと捉えられています。「天気予報は出ないのですか?」は残念ながらネガティブそうです。スコアを確認すると-0.6ですね。APIのレスポンスでもネガティブとして判断されているようです。絵文字がリアクションとして投稿されるので、スレッドを開かなくてもネガポジの解析結果を判断する事が出来ます。好意的な意見と否定的な意見の比率は施策によって遷移するのかを分析したいは実現が出来たので、Slackチャンネルで流れていくだけでは勿体無いので、コメントを蓄積してしたいも実現するべく、次はデータベースへのInsert機能をつけたいと思います。PostgreSQLはHerokuが公式でサポートしているので都合が良さそうです。Add-onsでHerokuにPostgreSQLを追加するとダッシュボードから確認出来るようになります。Herokuが自動的に環境変数に登録してくれるPostgreSQLのDBに接続するためのパスワード等は、Herokuの環境変数へと自動で登録されるのでラクチンです。保存しておきたい4つのプロパティ今後スコアを分析するの必要そうなプロパティは事前に考えておきました。下記の4つの値を保持しておくと、今後役立ちそうです。TABLE(今回のテーブル名はreviews)しておきます。PythonからDB接続するためにはドライバが必要になるので、psycopg2をimportしたうえでコネクションオブジェクトの取得を行います。psycopg2.connect(dsn)コネクションオブジェクトからDBカーソルを取得したら、必要なプロパティに対してInsertを実行します。conn.commit()レビューコメントや感情分析スコアが無事にDB保存されている事を確認できたら、今回の目標は達成となります!感情分析スコアDB作ってみて今回、ユーザーレビューを感情分析してSlackに投稿する/DBに保存する機能のBotを作りました。Android開発以外は門外漢で通ってきた自分ですが、質問に快くレスをくれた弊社の開発チームのおかげで無事にデプロイまで漕ぎ着ける事が出来たので感謝しかありません。いったチャレンジに取り組みやすい環境が弊社には揃っていると思います。Cook-Tool-Reviewと名付けました。(個人的にですが)なんでCook-Toolなのか。それは弊社開発チームのプロジェクトは基本的にお菓子の名前で呼ばれている事から発想しました。お菓子の調理を手伝う調理器具みたいな役割、Botがそんな風に役に立ったらいいなって気持ちを込めて名付けました。今後もサービス開発の助けになるようなCook-Tool-Botを増やしていければいいなって思います。17:08Tweet関連記事2022-03-17slack-goとZapierで障害対応初動を自動化した話サーバサイド開発やインフラ周りをいじっているたっち(TatchNic...2021-10-27属人化しがちなR&Dをチーム開発するためのJX通信社での工夫こんにちは!JX通信社でMLエンジニアのファンヨンテです。Corp.引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。