[PYTHON] Ich habe versucht, die Syntax zu bewerten, die mit der COTOHA-API zu humorvoll und humorvoll war.

Einführung

Kürzlich aufgrund des Einflusses einer bestimmten Videoserie [^ tokkun]

"Es war zu OO, und es wurde OO."

Ich bin süchtig nach dem Ausdruck. Vor kurzem war es zu kalt, als ich morgens von zu Hause wegging und Samgyopsal wurde. Mögen.

In der zweiten Hälfte des Teils "Werden Sie XX" gab es jedoch keine überraschend guten Worte.

"Es war so blendend, dass es zu einer Marmorschokolade wurde."

Ich denke, es gibt Zeiten, in denen Sie bei der Auswahl von Beinaheunfällen Kompromisse eingehen. Um mich zu warnen, habe ich ein Programm geschrieben, das die COTOHA-API verwendet, um die Syntax zu bewerten (ich würde es gerne mit Respekt nennen), die ich für zu verrückt hielt.

Bewertungsmethode

Die Syntax ist zu humorvoll,

"(Adjektivstamm) ist zu viel, ... wurde (Substantiv)"

Man kann sagen, dass die Syntax umso besser ist, je höher die Ähnlichkeit zwischen dem Adjektivstamm und der Nase ist. Aber die Nomenklatur kann kein Wort sein, das keinen Sinn ergibt. Wenn der Nomenklaturteil kein allgemeines Wort ist, möchte ich ihm 0 Punkte geben.

Für die Ähnlichkeit zwischen Adjektivstämmen und Nomenklatur möchte ich vorerst Lebenstein-Distanz verwenden. Ich möchte keine Punkte abziehen, auch wenn die Nomenklatur unnötig lang wird, wie ich zu Beginn sagte: "Es war zu kalt und ich wurde Samgyopsal." Daher betrachtet die Nomenklaturseite nur die Anzahl der Zeichen auf der Adjektivwort-Stammseite [^ tukkomi].

Anwendungsbeispiel

$ echo "Ich wurde ein Pferd, weil ich zu Pferd war" | python orochimaru.py
100.0 Punkte
Ich bin so verrückt ... ich bin verrückt ...

$ echo "Es wurde zu schillernd und wurde eine Marmorschokolade" | python orochimaru.py 
33.3 Punkte
Es ist zu mabushi, es ist eine Marmorschokolade geworden ...

$ echo "Es war so lustig, dass es lustig wurde" | python orochimaru.py 
0 Punkte
Es ist zu lustig, es ist lustig geworden ...

Vorbereitung

Verwenden Sie die COTOHA-API, um den Eingabetext zu analysieren und festzustellen, ob die Nase eine allgemeine Nomenklatur ist. Erstellen Sie ein Entwicklerkonto über das COTOHA API-Portal (https://api.ce-cotoha.com/) und notieren Sie sich Ihre Kunden-ID und Ihr Kundengeheimnis. Obwohl die Python-Bibliothek nicht in PyPi registriert ist, wird sie auf GitHub veröffentlicht. Installieren Sie sie daher unter diesem Artikel. Natürlich ist es nicht erforderlich, wenn Sie die API direkt aufrufen, und es scheint, dass sie derzeit nur Syntaxanalyse und Ähnlichkeitsberechnung unterstützt. Seien Sie also bitte vorsichtig.

Python verwendet 3.6. Wenn Sie Pyenv oder etwas verwenden, machen Sie es bitte gut.

$ git clone https://github.com/obilixilido/cotoha-nlp.git
$ cd cotoha-nlp/
$ pip install -e .

Sie können jetzt die Syntaxanalyse der COTOHA-API verwenden.

Implementierung

Levenstein Distanz Implementierung

[wikipedia](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83 Da der Algorithmus von% A5% E3% 82% BF% E3% 82% A4% E3% 83% B3% E8% B7% 9D% E9% 9B% A2) so implementiert ist, wie er ist, werden Details weggelassen.

levenshtein.py


def levenshtein_distance(s1, s2):
    l1 = len(s1)
    l2 = len(s2)
    dp = [[0 for j in range(l2+1)] for i in range(l1+1)]
    for i in range(l1+1):
        dp[i][0] = i
    for i in range(l2+1):
        dp[0][i] = i
    
    for i in range(1, l1+1):
        for j in range(1, l2+1):
            cost = 0 if (s1[i-1] == s2[j-1]) else 1
            dp[i][j] = min([dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1]+cost])
 
    return dp[l1][l2]

Zu gut für die Syntaxanalyse

Es ist eine sehr grobe Implementierung, aber wenn Sie einen Text eingeben, der mit "Es ist zu XX und es ist XX" übereinstimmt, werden die Punktzahl und der Text des Analyseergebnisses ausgegeben.

orochimaru.py


from cotoha_nlp.parse import Parser
import levenshtein_distance

def find_orochi_sentence(tokens):
    form_list = ["", "Zu", "Hand", "", "Zu", "Nana", "Tsu", "Ta"]
    pos_list = ["", "Adjektivsuffix", "Verbsuffix", "", "Fallassistent", "Verbstamm", "Verbale Nutzung endet", "Verbsuffix"]
    i = 0
    s1 = ""; s2 = ""
    is_unknown = False
    for token in tokens:
        if (i > 7): return 1
        if (i == 0):
            if not (token.pos == "Adjektivstamm"): return 1
            s1 = token.kana
        elif (i == 3):
            if not (token.pos == "Substantiv"): return 1
            s2 = token.kana
            if ("Undef" in token.features):
                is_unknown = True
        else:
            if (i == 4 and token.pos == "Substantiv"):
                s2 += token.kana
                if ("Undef" in token.feautes):
                    is_unknown = True
                continue
            if not (token.pos == pos_list[i] and token.form == form_list[i]): return 1
        i += 1

    if is_unknown:
        print("0 Punkte")
    else:
        dist = levenshtein_distance.levenshtein_distance(s1, s2[:len(s1)])
        print(f"{(100 * (len(s1) - dist) / len(s1)):.1f}Punkt")
    print(f"{s1}Zu viel ...{s2}Ich bin ...")
    return 0

parser = Parser("YOUR_CLIENT_ID",
    "YOUR_CLIENT_SECRET",
    "https://api.ce-cotoha.com/api/dev/nlp",
    "https://api.ce-cotoha.com/v1/oauth/accesstokens"
)
s = parser.parse(input())
if find_orochi_sentence(s.tokens) == 1:
    print("Das ist zu humorvoll und nicht syntaktisch")

Bei der syntaktischen Analyse der COTOHA-API wird die morphologische Information [^ Morphem] jedes Wortes erhalten, aber wenn das Wort ein unbekanntes Wort ist, wird die Information "Undef" zu den "Merkmalen" darin hinzugefügt. Basierend auf diesen Informationen wird beurteilt, ob der Nasenteil der Syntax ein allgemeines Substantiv ist, weil er zu humorvoll ist.

Wenn Kanji in die Ähnlichkeitsberechnung einbezogen wird, besteht das Problem der Notationsschwankung. Daher vergleichen wir die Verwendung mit Katakana-Messwerten. Wenn die COTOHA-API erkennt, dass der Messwert von den erwarteten Werten abweicht, wird er daher nicht korrekt beurteilt. (Beispiel: Es war zu scharf und wurde ein Gesicht)

Einige Syntax-Meister sind zu enthusiastisch, um sich mit dem Problem zu befassen, dass sie nicht in der Lage sind, ein gutes Wort zu finden, indem sie "zu viel, um eine Zeder zu werden" sagen, aber ich werde es nicht bewerten, weil es schlampig ist.

abschließend

Wenn ich jetzt zu verrückt bin, um eine Syntax zu finden, kann ich eine objektive Bewertung erhalten.

Dieses Mal habe ich versucht, die COTOHA-API für die morphologische Analyse zu verwenden, fand sie jedoch praktisch, da sie einfach zu verwenden ist und viele Wörter unterstützt. Ich finde es auch großartig, dass XX als richtige Nomenklatur angesehen wird, auch wenn es ein unbekanntes Wort in dem Teil ist, der "XX wurde". Die kostenlose Version hat eine Begrenzung für die Anzahl der API-Anfragen (1000 Mal pro Tag), aber ich denke, dass es kein Problem gibt, sie zum Spielen zu verwenden.

Jeder, bitte versuchen Sie, die Syntax zu oft zu verwenden. Vielen Dank.

Referenz

[^ tokkun]: Link zum Youtube-Kanal.

[^ tukkomi]: Dies ist ein Tsukkomi-Punkt, und ich denke, es gibt eine geeignetere Implementierungsmethode.

[^ morpheme]: Offizielle Referenz. "Undef" wird hier nicht erwähnt, daher kann es irgendwann unbrauchbar werden ...

Recommended Posts

Ich habe versucht, die Syntax zu bewerten, die mit der COTOHA-API zu humorvoll und humorvoll war.
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
[Erste COTOHA-API] Ich habe versucht, die alte Geschichte zusammenzufassen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, die COTOHA-API zu verwenden (es gibt auch Code auf GitHub).
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe versucht, Pyenv zu verwenden, das ich ohne Essen hasste, und es war zu bequem, mich hinzusetzen.
Ich habe versucht, verschiedene Sätze mit der automatischen Zusammenfassungs-API "summpy" zusammenzufassen.
Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
Ich habe versucht, Google Translate aus Python zu verwenden, und es war einfach zu einfach
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe versucht, die Sprache mit CNN + Melspectogram zu identifizieren
Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Eine Geschichte, die praktisch war, als ich versuchte, das Python-IP-Adressmodul zu verwenden
Es ist zu einfach, mit rauth auf die Twitter-API zuzugreifen, und ich habe sie ...
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Ich habe versucht, die Anzeigenoptimierung mithilfe des Banditenalgorithmus zu simulieren
Ich habe versucht, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
[TF] Ich habe versucht, das Lernergebnis mit Tensorboard zu visualisieren
Verschiedene Hinweise zur Verwendung von Python für Projekte
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren (Re-Challenge)
Ich habe versucht, das Zugriffsprotokoll mit Node.js auf dem Server auszugeben
[Für Anfänger] Ich habe versucht, die Tensorflow-Objekterkennungs-API zu verwenden
[Für diejenigen, die TPU verwenden möchten] Ich habe versucht, die Tensorflow Object Detection API 2 zu verwenden
Ich habe versucht, die Erstellung einer praktischen Umgebung mithilfe der SoftLayer-API der IBM Cloud zu automatisieren
Ich habe versucht, eine Quip-API zu erstellen
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Ich habe versucht, meinen Lieblingssänger (SHISHAMO) mit der Spotify-API zu analysieren
Ich habe versucht, den auf Papier gestempelten Stempel mit OpenCV zu digitalisieren
Ich habe versucht, den Benutzernamen und das Kennwort von phpMyAdmin zu bewerten, auf die der Serverangriff abzielte
Ich wurde entsetzt, als ich versuchte, mithilfe von PCA und NMF die Anzahl der Merkmale eines animierten Gesichts zu ermitteln.
Ich habe Teslas API berührt
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Ich habe die neuartige API von Naruro ausprobiert
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, die Höhen und Tiefen des Schlusskurses des Aktienkurses von Guru Navi mit TensorFlow vorherzusagen (Fortschritt)
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, die Docomo-Spracherkennungs-API und die Google Speech-API in Java zu verwenden
Zur Zeit möchte ich mit FastAPI zeigen, wie man eine solche API in swagger verwendet
Ich habe versucht, E-Mails von Node.js und Python mithilfe des E-Mail-Zustelldienstes (SendGrid) von IBM Cloud zuzustellen!
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich versuchte zusammenzufassen, bis ich die Bank verließ und Ingenieur wurde
Ich habe versucht, das Bild durch Klicken mit der rechten und linken Maustaste in den angegebenen Ordner zu verschieben