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.
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].
$ 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 ...
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.
[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]
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.
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.
[^ 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