【LINE BOT + COTOHA API】 너의 문장은 상대를 불쾌하게 하고 있지 않나? COTOHA 선생님에게 확인해 보자.
19406 단어 Python3코토하파이썬LINEmessagingAPIlinebot
0. 소개
채팅 도구, SNS가 보급된 지금, 문장에서의 커뮤니케이션이 폭발적으로 늘었지요.
채팅(Slack)에서만 참여한 적이 없는 손님과 처음 만났을 때, 이런 이야기를 받았습니다.
「全く怒っているつもりないんですけど、チャットだとそんな印象与えてしまうんですよね~。」
아니 있어요. 직업뿐만 아니라 개인이기도합니다!
인상이 나쁜 문장이 인상이 나쁜 대답을 만들어 음의 나선형이 된다. 이것은 매우 슬프다.
부정적인 단어의 존재는 무의식적으로 상대의 마음에 손상을줍니다.
SNS의 비방 중상이라든지 최악이군요.
그런 문장을 단속하기 위해 COTOHA 선생님이라는 것을 만들어 보았습니다!
COTOHA API를 사용하여 이런 것도 만들고 있습니다!
그건 그렇고, 아들 (2 세)에게 크리스마스 선물을 화려하게 실패한 내가 노리는 것은 "만들 버섯의 산"입니다.
1. COTOHA 선생님은?
COTOHA API 의 감정 분석 을 사용하여 LINE으로 입력한 메시지에 부정적인 단어가 포함되어 있는지 확인하는 LINE BOT입니다. COTOHA 선생님이 결과를 답해줍니다.
결과는 다음 패턴으로 분류됩니다.
2. 환경
3. 프로그램
line.py
import cotoha
import json
from codecs import decode
from os import environ, getenv
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
app = Flask(__name__)
handler = WebhookHandler(environ["LINE_CHANNEL_SECRET"])
linebot_api = LineBotApi(environ["LINE_CHANNEL_ACCESS_TOKEN"])
cotoha_api = cotoha.CotohaApi()
@app.route("/callback", methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
sentiment = cotoha_api.sentiment(event.message.text)
reply_message = make_reply_message(sentiment["result"])
linebot_api.reply_message(event.reply_token, reply_message)
def make_reply_message(sentiment_result):
positive_words = ""
negative_words = ""
for phrase in sentiment_result['emotional_phrase']:
if phrase['emotion'] == 'P':
positive_words = positive_words + '・' + phrase['form'] + '\n'
if phrase['emotion'] == 'N':
negative_words = negative_words + '・' + phrase['form'] + '\n'
if len(negative_words) > 0:
message = "君の文章、相手を不快にする可能性があります。\n以下のワードは使わないでちょ\uDBC0\uDC9E\n" + negative_words
elif len(positive_words) < 1:
message = "君の文章、悪くはないです。\nでもポジティブワードを1つは入れてちょ\uDBC0\uDC9D"
else:
message = "君の文章、完璧です。\n以下のワードがGood\uDBC0\uDC7F\n" + positive_words
return TextSendMessage(text=message)
if __name__ == "__main__":
port = int(getenv("PORT"))
app.run(host="0.0.0.0", port=port)
cotoha.py
import requests
import json
from os import environ
from codecs import decode
class CotohaApi:
DEVELOPER_API_BASE_URL = "https://api.ce-cotoha.com/api/dev/nlp/"
DEVELOPER_API_SENTIMENT_URL = DEVELOPER_API_BASE_URL + "v1/sentiment"
ACCESS_TOKEN_PUBLISH_URL = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
def __init__(self, client_id = "", client_secret = ""):
self.client_id = environ["CLIENT_ID"] if not client_id else client_id
self.client_secret = environ["CLIENT_SECRET"] if not client_secret else client_secret
def get_access_token(self):
headers = {
"Content-Type": "application/json;charset=UTF-8"
}
data = {
"grantType": "client_credentials",
"clientId": self.client_id,
"clientSecret": self.client_secret
}
response = requests.post(self.ACCESS_TOKEN_PUBLISH_URL, headers=headers, data=json.dumps(data))
return response.json()["access_token"]
def sentiment(self, sentence):
headers = {
"Authorization": "Bearer " + self.get_access_token(),
"Content-Type": "application/json;charset=UTF-8",
}
data = {
"sentence": sentence
}
response = requests.post(self.DEVELOPER_API_SENTIMENT_URL, headers=headers, data=json.dumps(data))
return response.json()
if __name__ == "__main__":
# 以下のパラメータを設定して「python .\cotoha.py」を実行すれば、
# 当モジュール単体での結果確認が可能
client_id = ""
client_secret = ""
text = "今日は楽しい1日でした。"
cotoha_api = CotohaApi(client_id, client_secret)
sentiment_result = cotoha_api.sentiment(text)
sentiment_formated = json.dumps(sentiment_result, indent=4)
print (decode(sentiment_formated, 'unicode-escape'))
4. 데모
5. 참고
LINE BOT 만드는 방법은 아래의 기사를 참고로 했습니다. 감사합니다!
6. 결론
감정 분석 등의 기술이 보급되어 인터넷의 세계에서 비방 중상을 없애고 싶네요!
·
·
·
어라?
Reference
이 문제에 관하여(【LINE BOT + COTOHA API】 너의 문장은 상대를 불쾌하게 하고 있지 않나? COTOHA 선생님에게 확인해 보자.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/i-tanaka730/items/a32b3ce7ca8c7edc9634텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)