[PYTHON] Eine Geschichte über den Versuch, Katsuo Isono, der nicht auf Unannehmlichkeiten reagiert, durch Verarbeitung natürlicher Sprache zu reproduzieren.

Einführung

Die COTOHA-API ist eine japanische API zur Verarbeitung natürlicher Sprache. Es hat verschiedene Funktionen und ist eine sehr unterhaltsame API, die auch mit einem kostenlosen Konto für 1000 / Tag verwendet werden kann.

COTOHA API

Kennst du übrigens alle Isono-Kun? Ja, es ist Katsuo Isono aus einem nationalen Anime.

Dieser Isono-Kun wird im Stück etwas genannt, aber wenn es unpraktisch ist, hört er es nicht oder reagiert auf den sogenannten "Menschen". Dieses Mal werde ich verschiedene Dinge mit der COTOHA-API ausprobieren, um dies zu erreichen.

Einzelheiten zur Verwendung der COTOHA-API finden Sie in dem [Artikel], den ich zuvor geschrieben habe (https://qiita.com/mosamosa/items/e63f6e582a206659dc2b) und in verschiedenen anderen Personen, die Artikel geschrieben haben. ..

Das fertige ISONO reagiert so.

ich:Hey Isono. Lass uns Baseball spielen.
Isono:Lesen?

ich:Isono-Kun
Isono:Lesen?

ich:Isono ist nicht gut
Isono:...

ich:Isono-Kun ist cool
Isono:Lesen?

ich:Apropos Isono, Iso Nori
Isono:...

Die Anzahl der Proben ist gering, aber wie sieht es aus? Ist es nicht wie Isono?

Vorbereitung

Erstellen Sie in der COTOHA-API eine Wrapper-Funktion, um anzuzeigen, ob erkannt wird, dass "Isono aufgerufen wurde". Wenn Sie glauben, angerufen worden zu sein, wird "Haben Sie angerufen?" Wenn nicht, wird "..." angezeigt.

Falten, weil es nicht wichtig ist
cotoha_exp = [
    "Isono",
    "Isono-Kun",
]
def call_cotoha(res_func,texts,cotoha_token,cotoha_exp):
    """
    res_func:Eine Funktion, die bestimmt, ob sie aufgerufen wurde. Erhält eine Anweisung und gibt true false zurück.
    texts:Anweisungsreihenfolge zu beurteilen
    cotoha_token:Zugangstoken
    cotoha_exp:Zur Bestimmung von Isono und seines Namens.
    """
    for t in texts:
        does_ans = res_func(t,cotoha_token,cotoha_exp)
        if does_ans:
            answer = "Lesen?"
        else:
            answer = "..."
        print("ich:{} \n Isono:{}\n".format(t,answer))

1. Der einfachste Weg zu nennen (morphologische Analyse, Isono-Kun mit übermäßigem Selbstbewusstsein)

Der einfachste Weg für Isono, seinen Anruf zu erkennen, besteht darin, den Text morphologisch zu analysieren und zu reagieren, wenn er Isono oder ähnliches enthält.

Einfach ausgedrückt, wenn Isono im Satz enthalten ist, wird es reagieren.

Klicken Sie hier, um eine Dokumentation zur Syntaxanalyse zu erhalten (https://api.ce-cotoha.com/contents/reference/apireference.html#parsing_response_morpheme).

Quellcode. Falten Sie es, da der Artikel lang sein wird
def parser_base(text,cotoha_token,cotoha_exp):

    header = {
        "Content-Type":"application/json",
        "Authorization":"Bearer "+cotoha_token
    }

    datas = {
        "sentence":text
    }

    r = requests.post(api_base+"nlp/v1/parse",headers=header,data=json.dumps(datas))
    parsed = json.loads(r.text)
    for res in parsed["result"]:
        for tok in res["tokens"]:
            for exp in cotoha_exp:
                if exp in tok["form"]:
                    return True
    return False

Ergebnis

call_cotoha(parser_base,texts,cotoha_token,cotoha_exp)
ich:Hey Isono. Lass uns Baseball spielen.
Isono:Lesen?

ich:Isono-Kun
Isono:Lesen?

ich:Isono ist nicht gut
Isono:Lesen?

ich:Isono-Kun ist cool
Isono:Lesen?

ich:Apropos Isono, Iso Nori
Isono:Lesen?

Natürlich ist es natürlich, aber es reagiert auf alles. Ich fühle mich etwas überbewusst.

2. Reaktion, wenn sie im richtigen Ausdruck enthalten ist (schließlich übermäßiges Selbstbewusstsein)

Auch wenn Sie sich nicht die Mühe machen, die Morphologie zu analysieren und alle Token anzuzeigen, verfügt die COTOHA-API über eine Funktion namens eindeutige Ausdrucksextraktion, mit der sich Personennamen, Ortsnamen, numerische Ausdrücke usw. auf einfache Weise extrahieren lassen. Wenn Sie dies verwenden, können Sie etwas Ähnliches wie 1. auf eine etwas stilvolle Weise tun.

Quellcode. Falten Sie es, da der Artikel lang sein wird
def ne_base(text,cotoha_token,cotoha_exp):

    header = {
        "Content-Type":"application/json",
        "Authorization":"Bearer "+cotoha_token
    }

    datas = {
        "sentence":text
    }

    r = requests.post(api_base+"nlp/v1/ne",headers=header,data=json.dumps(datas))
    parsed = json.loads(r.text)
    for res in parsed["result"]:
        for exp in cotoha_exp:
            if exp in res["form"]:
                return True
    return False

Ergebnis

ich:Hey Isono. Lass uns Baseball spielen.
Isono:Lesen?

ich:Isono-Kun
Isono:Lesen?

ich:Isono ist nicht gut
Isono:Lesen?

ich:Isono-Kun ist cool
Isono:Lesen?

ich:Apropos Isono, Iso Nori
Isono:Lesen?

Immerhin ist es übermäßiges Selbstbewusstsein. Nun, es geht um das Alter. Der Ruf der Menschen um mich herum ist besorgt.

3. Reaktion, falls im Schlüsselwort enthalten (Isono-kun, der überhaupt nicht reagiert)

Im Gegensatz zur richtigen Ausdrucksextraktion verfügt die COTOHA-API über eine Funktion namens Schlüsselwortextraktion, und ich möchte, dass sie reagiert, wenn Isono in einer bestimmten Konversation zu einem Schlüsselwort wird. Wenn Sie das Gefühl haben, das Thema zu sein, sollten Sie reagieren.

Quellcode. Falten Sie es, da der Artikel lang sein wird
def key_base(text,cotoha_token,cotoha_exp):

    header = {
        "Content-Type":"application/json",
        "Authorization":"Bearer "+cotoha_token
    }

    datas = {
        "document":text
    }

    r = requests.post(api_base+"nlp/v1/keyword",headers=header,data=json.dumps(datas))
    parsed = json.loads(r.text)
    for res in parsed["result"]:
        for exp in cotoha_exp:
            if exp in res["form"]:
                return True
    return False

Ergebnis

ich:Hey Isono. Lass uns Baseball spielen.
Isono:...

ich:Isono-Kun
Isono:...

ich:Isono ist nicht gut
Isono:...

ich:Isono-Kun ist cool
Isono:...

ich:Apropos Isono, Iso Nori
Isono:...

Es reagiert überhaupt nicht. Es scheint, dass der Name einer Person wahrscheinlich kein Schlüsselwort ist. Dies ist Isono-kuns Reaktion, als er etwas falsch gemacht hat.

Wird es antworten, wenn ich es auch damit nenne?

ich:Isono-Kun, Isono-Kun, Isono-Kun, Isono-Kun, Isono-Kun
Isono:...

Es ist nicht gut ... Isono-Kun scheint tot zu sein ...

4. Verwenden Sie Ähnlichkeit (gutes Gefühl)

Die COTOHA-API hat die Funktion, die Ähnlichkeit zwischen zwei Sätzen zu beurteilen, daher möchte ich diese verwenden. Insbesondere wenn die Ähnlichkeit mit dem Satz "Call Isono" hoch ist, werde ich beurteilen, dass Isono angerufen wird.

Quellcode. Falten Sie es, da der Artikel lang sein wird
def sim_base(text,cotoha_token,cotoha_exp):

    header = {
        "Content-Type":"application/json",
        "Authorization":"Bearer "+cotoha_token
    }

    datas = {
        "s1":text,
        "s2":"Rufen Sie Isono an"
    }

    r = requests.post(api_base+"nlp/v1/similarity",headers=header,data=json.dumps(datas))
    parsed = json.loads(r.text)
    if parsed["result"]["score"] > 0.5:
        return True
    else:
        return False

Ergebnis

ich:Hey Isono. Lass uns Baseball spielen.
Isono:Lesen?

ich:Isono-Kun
Isono:Lesen?

ich:Isono ist nicht gut
Isono:...

ich:Isono-Kun ist cool
Isono:...

ich:Apropos Isono, Iso Nori
Isono:...

Oh, ist es nicht ziemlich gut? Nur der erste und der zweite Anrufsatz antworteten. Es gibt keine Reaktionsmethode, die für Weckrufe wie Chat-Bots recht praktisch ist.

5. Reagieren Sie nur, wenn der Satztyp fragwürdig ist (subtil ...)

Die COTOHA-API kann bestimmen, um welche Art von Anweisung es sich handelt. (Beschreibungen / Fragen / Anweisungen können detaillierter aufgenommen werden. Weitere Informationen finden Sie unter Dokumentation.)

Ich werde versuchen, damit nur zu reagieren, wenn ein Satz fragwürdig ist. (Ich wünschte, ich hätte einen Satztyp namens Anruf, aber ich konnte ihn nicht finden ...)

Wenn es sich um eine fragwürdige Form handelt, funktioniert sie natürlich nicht. Wenn es sich also um eine fragwürdige Form handelt, wird eine morphologische Analyse durchgeführt, die als die empfindlichste angesehen wird, um festzustellen, ob COTOHA enthalten ist.

Quellcode. Falten Sie es, da der Artikel lang sein wird
def parser_sent_type_base(text,cotoha_token,cotoha_exp):
    header = {
        "Content-Type":"application/json",
        "Authorization":"Bearer "+cotoha_token
    }
    datas = {
        "sentence":text
    }

    r = requests.post(api_base+"nlp/v1/sentence_type",headers=header,data=json.dumps(datas))
    parsed = json.loads(r.text)
    if parsed["result"]["modality"] == "interrogative":
        return parser_base(text,cotoha_token,cotoha_exp)
    else:
        return False

Ergebnis

ich:Hey Isono. Lass uns Baseball spielen.
Isono:...

ich:Isono-Kun
Isono:...

ich:Isono ist nicht gut
Isono:...

ich:Isono-Kun ist cool
Isono:...

ich:Apropos Isono, Iso Nori
Isono:...

Hmm ... subtil ... es sieht nicht gut aus.

6. Reagieren Sie nur, wenn Sie wahrscheinlich ein Kompliment erhalten (bequemer Isono).

Die COTOHA-API verfügt über eine Funktion namens Emotionsanalyse, mit der Sie feststellen können, ob ein Satz positiv oder negativ ist. Damit ** Wenn der Satz positiv ist und Isono enthält → Wenn Isono gelobt zu werden scheint **

Ich möchte nur, dass es reagiert. Isono-Kun, der bequem ist. Lassen Sie uns alle auf Isono einstimmen.

Quellcode. Falten Sie es, da der Artikel lang sein wird
def senti_parser_base(text,cotoha_token,cotoha_exp):
    header = {
        "Content-Type":"application/json",
        "Authorization":"Bearer "+cotoha_token
    }
    datas = {
        "sentence":text
    }

    r = requests.post(api_base+"nlp/v1/sentiment",headers=header,data=json.dumps(datas))
    parsed = json.loads(r.text)
    if parsed["result"]["sentiment"] == "Positive":
        return parser_base(text,cotoha_token,cotoha_exp)
    else:
        return False

Ergebnis

ich:Hey Isono. Lass uns Baseball spielen.
Isono:...

ich:Isono-Kun
Isono:...

ich:Isono ist nicht gut
Isono:...

ich:Isono-Kun ist cool
Isono:Lesen?

ich:Apropos Isono, Iso Nori
Isono:...

Es scheint, dass die Eigenschaften von Isono recht gut reproduziert werden können.

Isono, an den ich gedacht habe.

Aus den bisherigen Versuchsergebnissen

Ich habe das Gefühl, dass Isono reproduziert werden kann, indem es reagiert, wenn einer von beiden zufrieden ist. Ich werde es versuchen.

def ISONO(text,cotoha_token,cotoha_exp):
    flag1 = sim_base(text,cotoha_token,cotoha_exp)
    flag2 = senti_parser_base(text,cotoha_token,cotoha_exp)
    return (flag1 or flag2)

Ergebnis

ich:Hey Isono. Lass uns Baseball spielen.
Isono:Lesen?

ich:Isono-Kun
Isono:Lesen?

ich:Isono ist nicht gut
Isono:...

ich:Isono-Kun ist cool
Isono:Lesen?

ich:Apropos Isono, Iso Nori
Isono:...

Künstliche Intelligenz ** ISONO ** Bombe hier (Übertreibung)

Am Ende.

Ich habe verschiedene Dinge mit so vielen APIs wie möglich ausprobiert. Wenn Sie jedoch einige Funktionen ausprobieren möchten, die noch nicht verfügbar sind (Zusammenfassung, Korrespondenzanalyse usw.), registrieren Sie sich bitte hier.

COTOHA API Portal

Ich wollte es komplett schreiben, dachte aber, dass es für Weckrufe wie Chatbots verwendet werden könnte.

Übrigens habe ich das Gefühl, dass ich eine negative Persönlichkeit schaffen kann, wenn ich versuche, nur auf Sätze zu reagieren, die wahrscheinlich abgelehnt werden. Ich habe das Gefühl, ich kann es reproduzieren, wenn ich eine bestimmte Persönlichkeit habe ...

** 卍 Angewandt 卍 ** scheint sich zu lohnen.

Recommended Posts

Eine Geschichte über den Versuch, Katsuo Isono, der nicht auf Unannehmlichkeiten reagiert, durch Verarbeitung natürlicher Sprache zu reproduzieren.
Eine Geschichte über einen Python-Anfänger, der von ModuleNotFoundError vernichtet werden sollte: Kein Modul namens 'Wewey'
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Eine Geschichte über den Versuch, einen Chot zu automatisieren, wenn Sie selbst kochen
Eine Geschichte über den Versuch, mehrere Python-Versionen auszuführen (Mac Edition)
Lose Artikel für diejenigen, die mit der Verarbeitung natürlicher Sprache beginnen möchten
Eine Geschichte über den Versuch, den Testprozess eines 20 Jahre alten Systems in C zu verbessern
Vorbereitung zum Starten der Verarbeitung natürlicher Sprache
Eine Geschichte, die es aufgegeben hat, JavaScripthon unter Windows auszuführen.
Die Geschichte, den Versuch aufzugeben, mit Heroku eine Verbindung zu MySQL herzustellen
Eine Geschichte über einen Anfänger, der sich bemüht, CentOS 8 einzurichten (Verfahrensnotiz)
3. Verarbeitung natürlicher Sprache mit Python 1-2. So erstellen Sie einen Korpus: Aozora Bunko