Récemment, en raison de l'influence d'une certaine série de vidéos [^ tokkun]
"C'était trop OO, et c'est devenu OO."
Je suis accro à l'expression. Récemment, il faisait trop froid quand je suis parti de chez moi le matin et je suis devenu Samgyopsal. Comme.
Cependant, dans la seconde moitié de la partie "devenir XX", des mots inattendus ne sont pas sortis.
"C'était si éblouissant que c'est devenu un chocolat marbré."
Je pense qu'il y a des moments où vous faites des compromis avec la sélection de mots presque manqués. Afin de me prévenir, j'ai écrit un programme qui utilise l'API COTOHA pour marquer la syntaxe (j'aimerais l'appeler avec respect) que je trouvais trop folle.
La syntaxe est trop humoristique,
"(La racine de l'adjectif) est trop, ... est devenu (nom)"
On peut dire que plus la similitude entre le radical adjectif et le nez est élevée, meilleure est la syntaxe. Mais la nomenclature ne peut pas être un mot qui n'a pas de sens. Si la partie nomenclature n'est pas un mot général, je voudrais lui donner 0 point.
Pour la similitude entre les radicaux adjectifs et la nomenclature, j'aimerais utiliser [distance de Lebenstein](implémentation de la distance #Lebenstein) pour le moment. Je ne veux pas déduire de points même si le côté nomenclature devient inutilement long, comme je l'ai dit au début, «il faisait trop froid et je suis devenu Samgyopsal». Par conséquent, le côté nomenclature ne regardera que le nombre de caractères du côté du mot adjectif [^ tukkomi].
$ echo "Je suis devenu cheval parce que j'étais trop cheval" | python orochimaru.py
100.0 point
Je suis tellement fou ... Je suis fou ...
$ echo "Il est devenu trop éblouissant et est devenu un chocolat marbré" | python orochimaru.py
33.3 points
C'est trop mabushi, c'est devenu un chocolat marbré ...
$ echo "C'était tellement drôle que c'est devenu drôle" | python orochimaru.py
0 point
C'est trop drôle, c'est devenu drôle ...
Utilisez l'API COTOHA pour analyser le texte d'entrée et déterminer si le nez est une nomenclature générale. Créez un compte de développeur à partir du portail API COTOHA (https://api.ce-cotoha.com/) et notez votre ID client et le secret client. De plus, bien qu'elle ne soit pas enregistrée dans PyPi, la bibliothèque python est publiée sur GitHub, donc installez-la en vous référant à cet article. Bien sûr, ce n'est pas nécessaire lorsque vous accédez directement à l'API, et il semble qu'il ne prend en charge que l'analyse syntaxique et le calcul de similitude pour le moment, alors soyez prudent.
python utilise 3.6. Si vous utilisez pyenv ou quelque chose comme ça, faites-le bien.
$ git clone https://github.com/obilixilido/cotoha-nlp.git
$ cd cotoha-nlp/
$ pip install -e .
Vous pouvez maintenant utiliser l'analyse syntaxique de l'API COTOHA.
[wikipedia](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83 % A5% E3% 82% BF% E3% 82% A4% E3% 83% B3% E8% B7% 9D% E9% 9B% A2) Je viens d'implémenter l'algorithme tel quel, je vais donc omettre les détails.
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]
C'est une implémentation très approximative, mais si vous entrez un texte qui correspond à "C'est trop XX et c'est XX", le score et le texte du résultat de l'analyse seront affichés.
orochimaru.py
from cotoha_nlp.parse import Parser
import levenshtein_distance
def find_orochi_sentence(tokens):
form_list = ["", "Aussi", "main", "", "À", "Nana", "Tsu", "Ta"]
pos_list = ["", "Suffixe d'adjectif", "Suffixe verbal", "", "Assistant de cas", "Tronc de verbe", "Fin d'utilisation verbale", "Suffixe verbal"]
i = 0
s1 = ""; s2 = ""
is_unknown = False
for token in tokens:
if (i > 7): return 1
if (i == 0):
if not (token.pos == "Adjectif radical"): return 1
s1 = token.kana
elif (i == 3):
if not (token.pos == "nom"): return 1
s2 = token.kana
if ("Undef" in token.features):
is_unknown = True
else:
if (i == 4 and token.pos == "nom"):
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 point")
else:
dist = levenshtein_distance.levenshtein_distance(s1, s2[:len(s1)])
print(f"{(100 * (len(s1) - dist) / len(s1)):.1f}Point")
print(f"{s1}Trop ...{s2}Je suis ...")
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("C'est trop humoristique et pas syntaxique")
Dans l'analyse syntaxique de l'API COTOHA, l'information morphologique [^ morphème] de chaque mot est obtenue, mais si le mot est un mot inconnu, l'information "Undef" est ajoutée aux "caractéristiques" qu'il contient. Sur la base de ces informations, il est jugé si la partie nez de la syntaxe est un nom général parce qu'il est trop humoristique.
De plus, si le kanji est inclus dans le calcul de similitude, il y a un problème de fluctuation de notation, nous comparons donc en utilisant la lecture de katakana. Par conséquent, si l'API COTOHA reconnaît que la lecture est différente de ce que vous attendiez, elle ne sera pas évaluée correctement. (Exemple: il était trop épicé et est devenu un visage)
Certains maîtres de la syntaxe sont trop enthousiastes pour traiter le problème de ne pas pouvoir trouver un bon mot en disant "trop pour devenir un cèdre", mais c'est une chose sournoise et je ne l'évaluerai pas.
Maintenant, chaque fois que je suis trop fou pour trouver une syntaxe, je peux obtenir une évaluation objective.
Cette fois, j'ai essayé d'utiliser l'API COTOHA pour l'analyse morphologique, mais je l'ai trouvée pratique car elle est facile à utiliser et prend en charge beaucoup de mots. Je pense que c'est aussi formidable que XX soit présumé être une nomenclature appropriée même si c'est un mot inconnu dans la partie qui "est devenu XX". La version gratuite a une limite sur le nombre de requêtes API (1000 fois par jour), mais je pense qu'il n'y a aucun problème à l'utiliser pour jouer.
Tout le monde, essayez d'utiliser trop la syntaxe. Merci beaucoup.
[^ tokkun]: Lien vers la chaîne Youtube.
[^ tukkomi]: C'est un point Tsukkomi, et je pense qu'il existe une méthode d'implémentation plus appropriée.
[^ morpheme]: Référence officielle. Il n'y a aucune mention de "Undef" ici, donc il peut éventuellement devenir inutilisable ...