[PYTHON] Ich habe keine Zeit, kann ich also einfach eine Frage stellen? feat. COTOHA API

Einführung

Wenn Sie beschäftigt sind und keine Zeit haben, ist es schwierig, einen langen Chat zu lesen. Es ist ärgerlich, weil es übersehen werden kann, wenn es Fragen gibt. Was ist zum Beispiel, wenn Sie den folgenden Chat erhalten, wenn Sie sehr beschäftigt sind?

Danke für deine harte Arbeit. Es tut mir leid, dass Sie bis gestern spät Überstunden gemacht haben.
Ich habe vergessen, dass ich am Geburtstag meiner Tochter nach Hause musste.
Es war hilfreich, die Materialien zu haben, um sie den Kunden zu zeigen.
Wo legst du das hin?
Oh, natürlich ist das heutige Getränk meine Gnade, vielen Dank.

Ich würde den Chat am Ende des Geburtstages von __ Tochter schließen. __ __ Aber schauen Sie genauer hin. Danach werden Sie gefragt, wo Sie die für den Kunden erstellten Materialien finden. Der Autor, der den Chat explosionsartig geschlossen hat, beantwortet die Frage nicht und wird danach wütend.

Extrahieren Sie dann nur den Fragentext und schneiden Sie alle anderen Teile ab. e? Können Sie das tun? Ich kann es schaffen Ja, mit COTOHA API.

Beispielprogramm (Entschuldigung für Sonstiges)

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")

#COTOHA API-Instanziierung
cotoha_api = CotohaApi(CLIENT_ID, CLIENT_SECRET, DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)

##Zu analysierende Aussage
input = "Danke für deine harte Arbeit. Es tut mir leid, dass Sie bis gestern spät Überstunden gemacht haben. Ich habe vergessen, dass ich am Geburtstag meiner Tochter nach Hause musste. Es war hilfreich, die Materialien, die den Kunden gezeigt werden sollen, stattdessen herstellen zu lassen. Wo legst du das hin? Ich werde es sammeln. Oh, natürlich ist das heutige Getränk meine Gnade, vielen Dank."
#Korrespondenzanalyse
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)

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

$ python3 getQuestion.py 
  #Ausgabe: Wo legen Sie die Materialien ab, um sie den Kunden zu zeigen?

Sie haben den Fragenteil korrekt extrahiert. Darüber hinaus kann "das" durch "Materialien, die den Kunden gezeigt werden sollen" ersetzt werden.

Was ist die COTOHA-API?

Es ist eine API-Plattform für die Verarbeitung natürlicher Sprache und Sprachverarbeitung, die von NTT Communications bereitgestellt wird. Es gibt eine kostenlose Version (für Entwickler) und eine kostenpflichtige Version (für Unternehmen). Die kostenlose Version kann bis zu 1000 Anrufe pro Tag verwenden. Es wird dringend empfohlen, da Sie es verwenden können, sobald Sie auch einfache Informationen registrieren. Die folgenden 14 Arten von APIs werden von der COTOHA-API bereitgestellt:

Ich glaube nicht, dass es viele Dienste gibt, die so viele Arten von APIs verarbeiten. Wow, NTT.

Dieser Artikel verwendet die COTOHA-API __Satztypbestimmung __ und __Korrespondenzanalyse __.

Urteilsurteil

__Satztypbestimmung __, eine der von der COTOHA-API bereitgestellten APIs, gibt die Art des Sprechakts wie Begrüßung und Einwilligung und den Satztyp wie Beschreibungssatz, Befehlssatz und Fragensatz aus. Weitere Informationen finden Sie unter API-Referenz zur Beurteilung des Satztyps. In diesem Programm werden die Eingabesätze extrahiert, deren Satztyp abfragend ist.

Korrespondenzanalyse

__Korrespondenzanalyse __ ist eine Technik zur Schätzung, worauf die Anweisungen wie "das", "es", "er" und "sie" in einem Satz verweisen. Die COTOHA-API bietet auch eine Korrespondenzanalyse-API, daher habe ich sie diesmal verwendet, um den Fragentext genauer zu beschreiben. Weitere Informationen zur API finden Sie in der API-Referenz zur Korrespondenzanalyse (https://api.ce-cotoha.com/contents/reference/apireference.html#correspond). Es gibt auch eine Analyse-Demo für die Korrespondenzanalyse-API, sodass Sie sie problemlos ausprobieren können.

image.png

Eine kurze Beschreibung des Programms

CotohaApi wird fast wie von `` `cotoha_api_python3.py``` in diesem Artikel ausgeliehen (einige Endpunkte werden auf die neuesten umgeschrieben). ).

Lesen Sie zuerst die Einstellungen, die im folgenden Teil in `` `.env``` geschrieben sind, und generieren Sie eine CotohaApi-Instanz.

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")

#CotohaApi-Instanziierung
cotoha_api = CotohaApi(CLIENT_ID, CLIENT_SECRET, DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)

Führen Sie als Nächstes eine Korrespondenzanalyse für den eingegebenen Satz durch und ersetzen Sie den demonstrativen Wortteil durch das Wort, auf das er zeigt.

#Korrespondenzanalyse
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)

Dann wird der Satztyp für jeden Satz beurteilt, der am Ende geschrieben werden soll, und der Fragensatz wird extrahiert.

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

Ja, Edten.

Ich habe verschiedene Dinge ausprobiert

Darüber hinaus habe ich in einigen Beispielen versucht, Fragensätze zu extrahieren, damit ich die Ergebnisse auf einfache Weise schreiben kann.

Material = Kuchen

input


Danke für deine harte Arbeit.
Es tut mir leid, dass Sie bis gestern spät Überstunden gemacht haben.
Ich habe vergessen, dass ich am Geburtstag meiner Tochter nach Hause musste.
Auf dem Heimweg kaufte ich mir einen Kuchen und aß ihn gerne.
Oh ja.
Es war hilfreich, die Materialien zu haben, um sie den Kunden zu zeigen.
Wo legst du das hin?
Ich werde es sammeln.
Oh, natürlich ist das heutige Getränk meine Gnade, vielen Dank.

output


Wo legst du den Kuchen hin?

Das Anweisungswort wurde von "Material, das den Kunden gezeigt werden soll" in "Kuchen" geändert. Warum? ?? ??

Was?

input


Ich muss etwas fragen.
Ich möchte mich für Angehörige bewerben, weiß aber nicht wie.
Gibt es dafür ein Verfahrenshandbuch?
Wir entschuldigen uns für die Unannehmlichkeiten, bedanken uns aber für Ihre Antwort."

output


Gibt es ein Verfahrenshandbuch für die Methode?

Was "dies" anzeigt, ist zu einer "Methode" geworden. Sicherlich kann dieser Bereich allein mit einer einfachen Korrespondenzanalyse schwierig sein. Möglicherweise möchten Sie auch die Abhängigkeitsanalyse verwenden.

welcher?

input


Bitte erzähl mir ein wenig.
Neulich haben Sie eine API-Spezifikation erstellt.
Was ist diese Version jetzt?

output


Was ist diese Version jetzt??

Es scheint, dass er nicht herausfinden konnte, was die Richtlinie war. Persönlich wollte ich, dass dies korrekt ausgegeben wird ...

schließlich

Ich habe verschiedene Dinge ausprobiert, aber ich hatte das Gefühl, dass die Genauigkeit der Korrespondenzanalyse etwas gering war. Wird die for Enterprise-Version etwas genauer sein? Andererseits wurde im Satztyp-Urteil der Fragensatz immer korrekt erfasst. Ich war ein wenig überrascht, dass ich die Frage bekommen konnte, auch wenn es kein "?" Gab.

Wenn Sie eine einfache Frage per Chat oder E-Mail erhalten können, Zusätzlich zu den am Anfang dieses Artikels genannten Zwecken kann es beispielsweise auch zum Lernen von Daten von Chatbots verwendet werden.

Dieses Mal habe ich einfach die Korrespondenzanalyse und die Satztypunterscheidung verwendet. Ich würde gerne mit etwas mehr Einfallsreichtum daran arbeiten.

Recommended Posts

Ich habe keine Zeit, kann ich also einfach eine Frage stellen? feat. COTOHA API
Ich habe eine Frage zu Leerzeichen
Ich habe eine Frage! (Python, Django) Einfach
Ich habe versucht, YouTube zu kratzen, aber ich kann die API verwenden, also tu es nicht.
Ich habe 10 Bücher gelesen, die sich auf Zeitreihendaten beziehen, daher werde ich eine Rezension schreiben.
Ich habe keine GPU, aber ich werde Deep Learning ausprobieren