[PYTHON] Une histoire sur la tentative de reproduire Katsuo Isono, qui ne réagit pas aux inconvénients, par traitement du langage naturel.

introduction

L'API COTOHA est une API de traitement du langage naturel japonais. Il a diverses fonctions et est une API très amusante qui peut être utilisée pour 1000 / jour même avec un compte gratuit.

COTOHA API

Au fait, connaissez-vous tous Isono-kun? Oui, c'est Katsuo Isono d'un anime national.

Cet Isono-kun s'appelle quelque chose dans la pièce, mais quand c'est gênant, il ne l'entend pas ou réagit soi-disant "humain". Cette fois, je vais essayer différentes choses avec l'API COTOHA pour y parvenir.

Pour plus de détails sur l'utilisation de l'API COTOHA, veuillez consulter l '[article] que j'ai écrit précédemment (https://qiita.com/mosamosa/items/e63f6e582a206659dc2b) et diverses autres personnes qui ont écrit des articles. ..

L'ISONO terminé réagit ainsi.

je:Salut Isono. Jouons au baseball.
Isono:Lis?

je:Isono-kun
Isono:Lis?

je:Isono n'est pas bon
Isono:...

je:Isono-kun est cool
Isono:Lis?

je:En parlant d'Isono, Iso Nori
Isono:...

Le nombre d'échantillons est petit, mais qu'en est-il? N'est-ce pas comme Isono?

Préparation

Créez une fonction wrapper pour afficher si "Isono a été appelé" est reconnu par l'API COTOHA. Si vous pensez avoir été appelé, "Avez-vous appelé?" Sinon, "..." s'affiche.

Pliage parce que ce n'est pas important
cotoha_exp = [
    "Isono",
    "Isono-kun",
]
def call_cotoha(res_func,texts,cotoha_token,cotoha_exp):
    """
    res_func:Une fonction qui détermine si elle a été appelée. Reçoit une instruction et renvoie true false.
    texts:Séquence d'énoncés à juger
    cotoha_token:Jeton d'accès
    cotoha_exp:Pour déterminer Isono et son nom.
    """
    for t in texts:
        does_ans = res_func(t,cotoha_token,cotoha_exp)
        if does_ans:
            answer = "Lis?"
        else:
            answer = "..."
        print("je:{} \n Isono:{}\n".format(t,answer))

1. La manière la plus simple d'appeler (analyse morphologique, Isono-kun avec une conscience de soi excessive)

Le moyen le plus simple pour Isono de détecter son appel est d'analyser morphologiquement le texte et de réagir s'il contient Isono ou quelque chose de similaire.

En termes simples, si Isono est inclus dans la phrase, il réagira.

Cliquez ici pour consulter la documentation sur l'analyse syntaxique (https://api.ce-cotoha.com/contents/reference/apireference.html#parsing_response_morpheme)

<détails>

Code source. Pliez-le car l'article sera long </ summary>

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

résultat

call_cotoha(parser_base,texts,cotoha_token,cotoha_exp)
je:Salut Isono. Jouons au baseball.
Isono:Lis?

je:Isono-kun
Isono:Lis?

je:Isono n'est pas bon
Isono:Lis?

je:Isono-kun est cool
Isono:Lis?

je:En parlant d'Isono, Iso Nori
Isono:Lis?

Bien sûr, c'est naturel, mais ça réagit à tout. Je me sens un peu trop conscient.

2. Réaction si incluse dans l'expression appropriée (après tout, conscience de soi excessive)

Même si vous ne vous souciez pas d'analyser la morphologie et de voir tous les jetons, l'API COTOHA a une fonction appelée extraction d'expressions uniques, qui facilite l'extraction des noms de personne, des noms de lieux, des expressions numériques, etc. Si vous l'utilisez, vous pouvez faire quelque chose de similaire à 1. d'une manière légèrement élégante.

<détails>

Code source. Pliez-le car l'article sera long </ summary>

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

résultat

je:Salut Isono. Jouons au baseball.
Isono:Lis?

je:Isono-kun
Isono:Lis?

je:Isono n'est pas bon
Isono:Lis?

je:Isono-kun est cool
Isono:Lis?

je:En parlant d'Isono, Iso Nori
Isono:Lis?

Après tout, c'est une conscience de soi excessive. Eh bien, c'est à peu près l'âge. La réputation des gens autour de moi est inquiète.

3. Réaction si inclus dans le mot-clé (Isono-kun qui ne réagit pas du tout)

Contrairement à l'extraction d'expressions appropriée, l'API COTOHA a une fonction appelée extraction de mots-clés, et je voudrais la faire réagir lorsque Isono devient un mot-clé dans une certaine conversation. Si vous sentez que vous êtes le sujet, vous devez réagir.

<détails>

Code source. Pliez-le car l'article sera long </ summary>

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

résultat

je:Salut Isono. Jouons au baseball.
Isono:...

je:Isono-kun
Isono:...

je:Isono n'est pas bon
Isono:...

je:Isono-kun est cool
Isono:...

je:En parlant d'Isono, Iso Nori
Isono:...

Ça ne réagit pas du tout. Il semble que le nom d'une personne ne soit probablement pas un mot-clé. C'est la réaction d'Isono-kun lorsqu'il a fait quelque chose de mal.

Répondra-t-il si je l'appelle même avec ça?

je:Isono-kun, Isono-kun, Isono-kun, Isono-kun, Isono-kun
Isono:...

Ce n'est pas bon ... Isono-kun semble mort ...

4. Utilisez la similitude (bonne sensation)

L'API COTOHA a une fonction pour juger de la similitude entre deux phrases, je voudrais donc l'utiliser. Plus précisément, si la similitude avec la phrase "Call Isono" est élevée, je jugerai qu'Isono est appelé.

<détails>

Code source. Pliez-le car l'article sera long </ summary>

def sim_base(text,cotoha_token,cotoha_exp):

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

    datas = {
        "s1":text,
        "s2":"Appeler Isono"
    }

    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

résultat

je:Salut Isono. Jouons au baseball.
Isono:Lis?

je:Isono-kun
Isono:Lis?

je:Isono n'est pas bon
Isono:...

je:Isono-kun est cool
Isono:...

je:En parlant d'Isono, Iso Nori
Isono:...

Oh, n'est-ce pas plutôt bon? Seules les première et deuxième phrases d'appel ont répondu. Il n'y a pas de méthode de réaction assez pratique pour les réveils tels que les chatbots.

5. Réagissez uniquement lorsque le type de phrase est discutable (subtile ...)

L'API COTOHA peut déterminer le type d'instruction d'une instruction. (Vous pouvez également prendre une description / question / instruction plus en détail. Pour plus de détails, voir Documentation.)

Je vais essayer de m'en servir pour réagir uniquement lorsqu'une phrase est discutable. (J'aurais aimé avoir un type de phrase appelé un appel, mais je ne l'ai pas trouvé ...)

Bien sûr, s'il s'agit d'une forme douteuse, cela ne fonctionnera pas, donc s'il s'agit d'une forme discutable, une analyse morphologique, considérée comme la plus sensible, est effectuée pour déterminer si COTOHA est inclus.

<détails>

Code source. Pliez-le car l'article sera long </ summary>

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

résultat

je:Salut Isono. Jouons au baseball.
Isono:...

je:Isono-kun
Isono:...

je:Isono n'est pas bon
Isono:...

je:Isono-kun est cool
Isono:...

je:En parlant d'Isono, Iso Nori
Isono:...

Hmm ... subtile ... ça ne semble pas bon.

6. Réagissez uniquement lorsque vous êtes susceptible d'être complimenté (Isono pratique)

L'API COTOHA a une fonction appelée analyse des émotions, qui vous permet de déterminer si une phrase est positive ou négative. Alors ** Lorsque la phrase est positive et contient Isono → Quand Isono semble être loué **

Je veux juste le faire réagir. Isono-kun, qui est pratique. Mettons-nous tous dans l'ambiance pour Isono.

<détails>

Code source. Pliez-le car l'article sera long </ summary>

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

résultat

je:Salut Isono. Jouons au baseball.
Isono:...

je:Isono-kun
Isono:...

je:Isono n'est pas bon
Isono:...

je:Isono-kun est cool
Isono:Lis?

je:En parlant d'Isono, Iso Nori
Isono:...

Il semble que les caractéristiques d'Isono puissent être assez bien reproduites.

Isono, auquel j'ai pensé.

D'après les résultats des expériences jusqu'à présent

  • Une phrase similaire à "Call Isono"
  • C'est une phrase qui fait l'éloge d'Isono

Je sens qu'Isono peut être reproduit en le faisant réagir lorsque l'un ou l'autre est satisfait. Je vais essayer.

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)

résultat

je:Salut Isono. Jouons au baseball.
Isono:Lis?

je:Isono-kun
Isono:Lis?

je:Isono n'est pas bon
Isono:...

je:Isono-kun est cool
Isono:Lis?

je:En parlant d'Isono, Iso Nori
Isono:...

Intelligence artificielle ** ISONO ** Bombe ici (exagération)

À la fin.

J'ai essayé différentes choses en utilisant autant d'API que possible, mais si vous souhaitez essayer certaines fonctionnalités qui ne sont pas encore disponibles (résumé, analyse de correspondance, etc.), veuillez vous inscrire ici.

COTOHA API Portal

J'avais l'intention de l'écrire complètement, mais je pensais qu'il pourrait être utilisé pour des réveils tels que les chatbots.

Au fait, je sens que je peux créer une personnalité négative si j'essaie de ne réagir qu'à des phrases susceptibles d'être refusées. J'ai l'impression de pouvoir le reproduire si j'ai une certaine personnalité ...

** 卍 Appliqué 卍 ** semble en valoir la peine.

Recommended Posts