[PYTHON] J'ai essayé de faire un BOT de détection de lèvre d'air et de réponse automatique pour le travail à distance

En raison de l'influence de Corona, le travail à distance est venu à moi, qui est le prochain entrepreneur depuis de nombreuses années. Vous pouvez travailler dans un environnement calme à la maison. Je n'ai pas besoin de prendre un train de banlieue et je sais que je fais beaucoup de déchets.

Au fait, le problème que j'ai avec ce travail à distance est le "chat". J'ai pas mal de canaux, comme mon entreprise et le service client, Par conséquent, l'événement de la lèvre d'air que «votre nom sort sans mention» se produit souvent. À mesure que le nombre d'employés de travail à distance augmente, le flux de discussion augmente également et il est difficile de le récupérer.

Ceci lui-même est "faire des mentions correctement s'il y a un besoin" "définir une notification de mot clé" C'est une histoire qui devrait être gérée avec le capot latéral d'opération, mais cette fois c'est un gros problème ** Implémentons "Analyser le contenu de la lèvre d'air et séparer la réponse BOT en fonction du contenu" **.

L'image ressemble à ceci. bot_flow.png

Créer un chat BOT

Peu importe ce que vous utilisez. Avec Python, il devrait y avoir quelque chose pour n'importe quelle plateforme de chat, Qiita a également beaucoup de bons articles.

J'ai pensé à l'utiliser avec mon propre Slack, mais avant cela, je veux vérifier correctement le fonctionnement, donc Cette fois, je vais utiliser Telegram, qui a beaucoup de connaissances sur mon Internet.

De plus, si le COTOHA utilisé cette fois n'est qu'une fonction réservée aux développeurs, conformément aux conditions d'utilisation, https://www.ntt.com/content/dam/nttcom/hq/jp/about-us/disclosure/tariff/pdf/c256.pdf Soyez prudent lorsque vous l'utilisez car cela entraînera un problème de licence si vous l'utilisez à des fins professionnelles.

J'utiliserai ce BOT que j'ai fait auparavant. https://qiita.com/Ovismeme/items/cc59a2de1cf537c977cf https://github.com/ovismeme/telegram_autoreply_bot

Au moment de faire ceci, je l'ai écrit en imitant l'exemple de code dans "Je ne comprends pas Python". Quand j'ai regardé en arrière pour la première fois en un an, j'ai dit: "Qu'est-ce que c'est que cette poubelle. Qui l'a écrit!", Alors je l'ai beaucoup réparée. La lisibilité s'est un peu améliorée, mais la partie principale de cet article n'est pas là, je vais donc l'omettre.

Veuillez vous référer à l'article original pour savoir comment le faire, En tant qu'exigence de BOT, tout est correct tant qu'il a les fonctions de "capter ce qui a été dit" et de "parler". Un module doit également être fourni, mais le mécanisme de saisie des énoncés diffère selon l'élément, alors assurez-vous de lire attentivement le document.

Utiliser l'API COTOHA

Enregistrement du Compte

Pour déterminer "si le texte est négatif ou positif" Nous utiliserons COTOHA fourni par NTT Communications Co., Ltd. pour les développeurs.

COTOHA API

Expliquer comment s'inscrire très facilement
![c99dba0e850d24459e47cb2889b10af6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211046/ee0f6b61-a23d-1a6e-c9a9-73126c277b37.png) Cliquez ici pour saisir votre adresse e-mail et suivez le lien dans l'e-mail renvoyé pour terminer l'enregistrement.

86f90895a0c958336f53ca6a7e57dbd2.png

Après l'enregistrement, vous pourrez voir le portail du compte, où votre ID client et votre secret client seront émis.

Appel API

Comment obtenir un jeton d'accès API d'analyse des émotions La méthode est écrite ici.

La seule chose que vous pouvez faire est d'accéder à l'API, mais je vais coller le code en cours d'exécution. Les informations d'accès, URL, etc. sont plongées dans la configuration, donc lorsque vous l'utilisez vous-même, Veuillez le déplacer par code dur ou en appelant config.

<détails>

Appel API </ summary>

cotoha.py


import requests
import configparser
import pprint

class CotohaController:
    def __init__(self):
        config_file = './settings/config.ini'
        self.config = configparser.ConfigParser()
        self.config.read(config_file, 'utf-8')
        self.base_url = str(self.config.get('cotoha_auth', 'base_url'))
        self.headers = {
            'Content-Type' : 'application/json;charset=UTF-8'
        }
        self.get_accesstoken()

    def get_accesstoken(self):
        request_body = {
            "grantType": "client_credentials",
            "clientId": str(self.config.get('cotoha_auth', 'client_id')),
            "clientSecret": str(self.config.get('cotoha_auth', 'client_secret'))
        }
        auth_url = str(self.config.get('cotoha_auth', 'auth_url'))
        responce = requests.post(auth_url, headers=self.headers, json=request_body)
        self.headers.update(Authorization = 'Bearer ' + responce.json()['access_token'])

    def emotion_analysis(self, text):
        request_body = {
            "sentence": str(text)
        }
        url = self.base_url + '/nlp/v1/sentiment'
        responce = requests.post(url, headers=self.headers, json=request_body)
        return responce.json()['result']['sentiment']


if __name__ == '__main__':
    cotoha = CotohaController()
    print(cotoha.emotion_analysis('Je ferai de mon mieux aujourd'hui aussi!'))

Si vous passez le texte à ʻemotion_analysis () , l'API analysera l'émotion et retournera Positive`` Negative Neutral`.

PS D:\src\telegram_autoreply_bot> python .\cotoha.py
Positive

L'exemple de code ressemble à ceci.

Réglage côté BOT

try:
    cth = cotoha.CotohaController()
    emote = cth.emotion_analysis(rcv_text)
    reply_list = self.replyLists['cotoha'][emote]
    return_text = reply_list[random.randrange(len(reply_list))]
except Exception:
    return_text = "・ ・ ・"

Lorsqu'il y a un énoncé de déclenchement, appuyez sur le module d'appel d'API créé précédemment et renvoyez une réponse au hasard à partir du fichier de définition en fonction de l'analyse des émotions de l'API.


 [
   "regex:.*Memetan.*",
   "regex:.*(mouton|mouton|Mouton).*"
 ]

Dans mon implémentation, il se déclenche lorsqu'il correspond à cette expression régulière.

Pour référence, la partie définition de la réponse ressemble à ceci. <détails>

Définition json </ summary>

  "cotoha" : {
    "Positive" : [
      "Complimentez plus! !!",
      "C'est tout! C'est tout! !!",
      "Il s'étire quand vous le louez (sous le nez)"
    ],
    "Negative" : [
      "Je peux t'entendre!",
      "Qu'est-ce que tu attends! !!",
      "Quel furtif! !!",
      "Pas de mauvais discours! !!"
    ],
    "Neutral" : [
      "Pas de lèvre d'air! !!",
      "appelé? Vous l'avez appelé! ?? Vous l'avez appelé! ??",
      "Veuillez nous indiquer les exigences et payer 10000 yens lorsque vous l'utilisez.",
      "Avez-vous dit quelque chose?"
    ]
  }

Soit dit en passant, ce n’est pas une implémentation de «répondre» Il existe de nombreuses implémentations perverses telles que ** "Faufiler une mention à vous-même quand un mot négatif arrive" **. Je m'abstiens de faire diverses choses cette fois, mais faites-moi savoir si vous avez des implémentations intéressantes.

mouvement

29cf765e043a4d68331e75ebd750ea64.png

Il a été bien accueilli et est avant tout.

Soyez prudent et parlez de Yomoyama

À propos des déclencheurs d'appels

https://api.ce-cotoha.com/contents/reference/apireference.html#parsing C'est une mise en œuvre plus cool pour faire cette analyse morphologique et prendre votre nom parmi les éléments morphologiques.

Cependant, le traitement du langage naturel japonais est vulnérable à une nomenclature appropriée. En particulier, je ne peux pas saisir des noms dont je ne comprends pas la signification de hiragana, et cela peut provoquer des dysfonctionnements. Je pense que les produits COTOHA API ou NTT sont plus précis, mais Pourtant, il est difficile de trouver exactement quelque chose comme un surnom. Mon nom d'écran "Memetan" peut également être décomposé comme "Memetan" en fonction du contexte. Par conséquent, il n'y a pas d'erreur sous la forme de tir avec une expression régulière sans utiliser l'analyse morphologique pour le déclencheur.

À propos de l'analyse des émotions

Je suis désolé d'avoir lu jusqu'ici, mais cela peut être difficile à dire. Pour être honnête, dites-vous qu'il existe peu de variantes de mauvais mots, ou est-ce fait sans supposer de mauvais mots? Je ne sais pas si les mots "bad talk" et "Negative" sont différents, mais Actuellement, le drapeau "Négatif" n'est pas très élevé. J'avais mal au cœur et j'écrivais de mauvais mots sur moi-même, mais j'étais un peu déçu. afc12487ec568fb355eec13a260ce6bb.png

J'ai de grandes attentes pour ce domaine à l'avenir. En guise de couverture côté opération, mon côté BOT implémente que même "Neutre" renvoie une réponse similaire. Pour ceux qui veulent faire un BOT à cocher, il peut être préférable de le faire fonctionner autrement que "Positive".

Vous ne pouvez pas l'utiliser à des fins commerciales! Qu'est-ce que c'est pour le travail à distance!

Vous pouvez l'utiliser pour 130 000 yens par mois, entrée vocale comprise! !! Ce n'est pas cher! !! (Je ne dis pas de payer) Bien sûr, je ne pense pas qu'il soit possible d'inclure cette fonction seule, mais si vous la proposez comme un ensemble avec d'autres fonctions, l'entreprise peut la passer. Utilisez à vos risques et périls.

À la fin

J'ai utilisé un chat BOT prêt à l'emploi, mais comme je n'ai préparé l'appel API que ce matin, Peut-être que tous ceux qui verront Qiita pourront l'utiliser sans trop d'efforts. Le traitement du langage naturel a de nombreuses utilisations idiotes et est très amusant à faire pour le plaisir, alors veuillez nous montrer vos idées.

Merci pour votre visite.

Recommended Posts