[PYTHON] Je n'ai pas le temps, puis-je simplement poser une question? feat. API COTOHA

introduction

Lorsque vous êtes occupé et que vous n'avez pas le temps, il est difficile de lire une longue discussion. C'est ennuyeux car on peut l'oublier s'il y a des questions. Par exemple, que se passe-t-il si vous obtenez le chat suivant lorsque vous êtes extrêmement occupé?

Je vous remercie pour votre travail acharné. Je suis désolé de vous avoir fait faire des heures supplémentaires jusqu'à hier tard.
J'ai oublié que je devais rentrer à la maison le jour de l'anniversaire de ma fille.
Il était utile d'avoir le matériel à montrer aux clients.
Où mettez-vous cela?
Oh, bien sûr, le verre de ce soir est ma grâce, merci beaucoup.

Je fermais le chat à la fin de l'anniversaire de __ fille. __ Mais regardez de plus près. Après cela, il vous est demandé où trouver les matériaux créés pour le client. L'auteur qui a fermé le chat de manière explosive ne répond pas à la question, il se met donc en colère après cela.

Ensuite, extrayez uniquement le texte de la question et coupez toutes les autres parties. e? Peux-tu faire ça? Je peux le faire. Oui, avec API COTOHA.

Exemple de programme (désolé pour divers)

getQuestion.py


import os
import regex
from dotenv import load_dotenv
import itertools
from cotoha_api import CotohaApi

dotenv_path = '.env'
load_dotenv(dotenv_path)
CLIENT_ID = os.environ.get("CLIENT_ID")
CLIENT_SECRET = os.environ.get("CLIENT_SECRET")
DEVELOPER_API_BASE_URL = os.environ.get("DEVELOPER_API_BASE_URL")
ACCESS_TOKEN_PUBLISH_URL = os.environ.get("ACCESS_TOKEN_PUBLISH_URL")

#Instanciation de l'API COTOHA
cotoha_api = CotohaApi(CLIENT_ID, CLIENT_SECRET, DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)

##Phrase cible d'analyse
input = "Je vous remercie pour votre travail acharné. Je suis désolé de vous avoir fait faire des heures supplémentaires jusqu'à hier tard. J'ai oublié que je devais rentrer à la maison le jour de l'anniversaire de ma fille. Il a été utile de faire fabriquer les matériaux à montrer aux clients. Où mettez-vous cela? Je vais le récupérer. Oh, bien sûr, le verre de ce soir est ma grâce, merci beaucoup."
#Analyse de correspondance
result = cotoha_api.coreference(input)
coreference = result['result']['coreference']
tokens = result['result']['tokens']

if len(coreference) != 0:
    for relation in coreference:
        referents = relation['referents']
        sentence_id = referents[1]['sentence_id']
        token_id = referents[1]['token_id_to']
        token = referents[0]['form']
        tokens[sentence_id][token_id] = token            

input = ''.join(list(itertools.chain.from_iterable(tokens)))

sentenceList = regex.split(r'(?<=[。? ! \n])(?!$)', input, flags=regex.VERSION1)

#Jugement de type de phrase
for sentence in sentenceList:
    sentenceType = cotoha_api.sentenceType(sentence)
    modality = sentenceType['result']['modality']
    if modality == 'interrogative':
        print(sentence)

$ python3 getQuestion.py 
  #Résultat: où placez-vous le matériel à montrer aux clients?

Vous avez correctement extrait la partie question. De plus, «qui» peut être remplacé par «des matériaux à montrer aux clients».

Qu'est-ce que l'API COTOHA?

Il s'agit d'une plate-forme API pour le traitement du langage naturel et le traitement de la voix fournie par NTT Communications. Il existe une version gratuite (pour les développeurs) et une version payante (pour l'entreprise), et la version gratuite peut utiliser jusqu'à 1000 appels par jour. Il est fortement recommandé car vous pouvez l'utiliser dès que vous enregistrez des informations même simples. Les 14 types d'API suivants sont fournis par l'API COTOHA:

Je ne pense pas qu'il existe de nombreux services qui gèrent autant de types d'API. Wow, NTT.

Cet article utilise la détermination du type __sentence API COTOHA __ et l'analyse __correspondence __.

Jugement de type de phrase

__Détermination du type de phrase __, qui est l'une des API fournies par l'API COTOHA, génère le type d'acte de parole tel que salutation et consentement et le type de phrase tel que phrase descriptive, phrase de commande et phrase de question. Pour plus de détails, voir Référence API de jugement de type de phrase. Dans ce programme, il est utilisé pour extraire les phrases d'entrée dont le type de phrase est interrogatif.

Analyse de correspondance

__ L'analyse de correspondance __ est une technique pour estimer ce que les directives telles que «cela», «cela», «il» et «elle» qui apparaissent dans une phrase pointent. L'API COTOHA fournit également une API d'analyse de correspondance, donc cette fois je l'ai utilisée pour décrire le texte de la question plus en détail. Pour plus d'informations sur l'API, consultez Référence de l'API d'analyse des correspondances (https://api.ce-cotoha.com/contents/reference/apireference.html#correspond). De plus, la Démo d'analyse est également disponible pour l'API d'analyse de correspondance, vous pouvez donc l'essayer facilement.

image.png

Une brève description du programme

Cotoha Api est emprunté presque tel quel à `` cotoha_api_python3.py``` dans cet article (certains points de terminaison sont réécrits avec les derniers) ).

Tout d'abord, lisez les paramètres écrits en `` .env '' dans la partie suivante et générez une instance CotohaApi.

dotenv_path = '.env'
load_dotenv(dotenv_path)
CLIENT_ID = os.environ.get("CLIENT_ID")
CLIENT_SECRET = os.environ.get("CLIENT_SECRET")
DEVELOPER_API_BASE_URL = os.environ.get("DEVELOPER_API_BASE_URL")
ACCESS_TOKEN_PUBLISH_URL = os.environ.get("ACCESS_TOKEN_PUBLISH_URL")

#Instanciation CotohaApi
cotoha_api = CotohaApi(CLIENT_ID, CLIENT_SECRET, DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)

Ensuite, effectuez une analyse de correspondance sur la phrase saisie et remplacez la partie du mot démonstratif par le mot vers lequel elle pointe.

#Analyse de correspondance
result = cotoha_api.coreference(input)
coreference = result['result']['coreference']
tokens = result['result']['tokens']

if len(coreference) != 0:
    for relation in coreference:
        referents = relation['referents']
        sentence_id = referents[1]['sentence_id']
        token_id = referents[1]['token_id_to']
        token = referents[0]['form']
        tokens[sentence_id][token_id] = token            

input = ''.join(list(itertools.chain.from_iterable(tokens)))

sentenceList = regex.split(r'(?<=[。? ! \n])(?!$)', input, flags=regex.VERSION1)

Ensuite, le type de phrase est évalué pour chaque phrase à écrire à la fin, et la phrase de question est extraite.

#Jugement de type de phrase
for sentence in sentenceList:
    sentenceType = cotoha_api.sentenceType(sentence)
    modality = sentenceType['result']['modality']
    if modality == 'interrogative':
        print(sentence)

Oui, Edten.

J'ai essayé diverses choses

En plus de ce qui précède, j'ai essayé d'extraire des phrases de questions dans certains exemples, donc j'écrirai les résultats de manière simple.

Matériel = gâteau

input


Je vous remercie pour votre travail acharné.
Je suis désolé de vous avoir fait faire des heures supplémentaires jusqu'à hier tard.
J'ai oublié que je devais rentrer à la maison le jour de l'anniversaire de ma fille.
J'ai acheté un gâteau en rentrant chez moi et j'étais heureux de le manger.
Oh oui.
Il était utile d'avoir le matériel à montrer aux clients.
Où mettez-vous cela?
Je vais le récupérer.
Oh, bien sûr, le verre de ce soir est ma grâce, merci beaucoup.

output


Où mettez-vous le gâteau?

Le mot d'instruction est passé de «matériel à montrer aux clients» à «gâteau». Pourquoi? ?? ??

Quoi?

input


J'ai quelque chose à demander.
J'aimerais faire une demande pour les personnes à charge, mais je ne sais pas comment.
Existe-t-il un manuel de procédure pour cela?
Nous vous prions de nous excuser pour la gêne occasionnée, mais merci pour votre réponse."

output


Existe-t-il un manuel de procédure pour la méthode?

Ce que «ceci» indique est devenu une «méthode». Certes, ce domaine peut être difficile avec une simple analyse de correspondance uniquement. Vous pouvez également essayer d'utiliser l'analyse des dépendances.

laquelle?

input


Veuillez m'en dire un peu.
L'autre jour, vous avez fait une spécification d'API.
Quelle est cette version maintenant?

output


Quelle est cette version maintenant??

Il semble qu'il n'a pas pu découvrir quelle était la directive. Personnellement, je voulais que cela soit affiché correctement ...

à la fin

J'ai essayé diverses choses, mais j'ai senti que l'exactitude de l'analyse de la correspondance était un peu faible. La version pour Enterprise sera-t-elle un peu plus précise? Par contre, dans le jugement de type de phrase, la phrase de question était toujours acquise correctement. J'ai été un peu surpris de pouvoir obtenir la question même s'il n'y avait pas de "?".

Si vous pouvez recevoir une question simple par chat ou par e-mail, En plus des finalités mentionnées au début de cet article, il peut également être utilisé pour l'apprentissage des données de chatbots, par exemple.

Cette fois, j'ai simplement utilisé l'analyse de correspondance et la discrimination de type de phrase, J'aimerais y travailler avec un peu plus d'ingéniosité.

Recommended Posts

Je n'ai pas le temps, puis-je simplement poser une question? feat. API COTOHA
J'ai une question sur les blancs
J'ai une question! (Python, django) Facile
J'ai essayé de gratter YouTube, mais je peux utiliser l'API, alors ne le faites pas.
J'ai lu 10 livres liés aux données de séries chronologiques, je vais donc rédiger une critique.
Je n'ai pas de GPU, mais je vais essayer le Deep Learning