[PYTHON] C'est vrai, mangeons-le. [Traitement du langage naturel à partir de Kyoto Ben]

introduction

Je vais faire du traitement du langage naturel pour la première fois. C'est exitant. Cet article est [Plan actuel de l'API Qiita x COTOHA] Analysons le texte avec l'API COTOHA! ](Https://zine.qiita.com/event/collaboration-cotoha-api/?utm_source=qiita&utm_medium=banner). ~~ Je veux trop de prix! ~~ J'étais à temps pour poster.

Le sujet principal immédiatement. Que faire maintenant.

Tout d'abord, je présenterai brièvement ce qu'il faut faire. Le suivant a été fait ↓

python3 bubuduke.py "Hetaxo"
"Ne sois pas bon"

Je vais faire un traducteur de valve Kyoto comme celui-ci. Bubu-zuke est délicieux! Yay! bubu.jpg

Flux de cet article

Avec ce flux, si vous le remarquez, vous disposez d'un outil pratique comme celui ci-dessus. Très facile.

Rendre l'API COTOHA disponible pour le moment

Inscrivez-vous maintenant gratuitement à partir ici. Envoyez votre adresse e-mail et créez un compte. Connectez-vous si vous le pouvez. Ensuite, vous verrez cet écran. (Publicité jusqu'à présent) cotohaapi.png

Quant à ce site, je n'utiliserai l'ID que plus tard, c'est donc la fin.

Qu'est-ce que le traitement du langage naturel

Pour le dire très simplement, traiter les mots (= langage naturel) que les humains utilisent habituellement. Non, n'est-ce pas comme ça? Ce qui est difficile à ce sujet, c'est que ** les langues naturelles, en particulier le japonais, ne sont pas bien définies **.

Le japonais n'est pas bien défini

«Pas bien défini» signifie que la définition n'attribue pas d'interprétation ou de valeur unique. Vous pouvez penser à plusieurs interprétations d'une phrase ici.

Prenons un exemple simple. Comme suit.  toilet.png Personne ne voit cela et pense qu'il n'est pas bon de faire caca. Cependant, si vous essayez d'écrire cette phrase littéralement avec un pseudo-code, ce sera comme ça.

si jeté== "Papier toilette" then
Vous pouvez jeter

cette? J'ai l'impression que je ne peux pas me débarrasser de ça.

La vanne Kyoto est le nec plus ultra.

La valve Kyoto que j'ai décidé de manipuler cette fois. Par exemple, comme ça.  bubuduke.png

Ci-dessus se trouve le célèbre Bubu-zuke. Bubu-zuke devrait signifier Ocha-zuke à Kyoto Ben. Même ainsi, être conseillé de cornichons à Bubu signifie que vous devriez rentrer chez vous. Je ne comprends pas.

Bref, Kyoto Ben est insidieux

Laissez-moi vous donner un autre exemple.   tokei.png

Je suis désolé, le déraillement est long. Il y a beaucoup d'autres mots dégoûtants de Kyoto, mais je les omettrai. Si vous êtes intéressé, je pense que vous pouvez en trouver divers ici. En bref, ** Kyoto Ben est insidieux et est le comble des mots qui ne sont pas bien définis. ** **

Dans le traitement du langage naturel, les mots et la syntaxe sont traités par rapport aux informations de ces langages naturels. Après tout, je n'explique que le langage naturel. Désormais, nous traiterons un langage naturel appelé japonais et implémenterons un robot capable de répondre à un "style" de valve de Kyoto aussi insidieux.

Essayez de traiter le texte en langage naturel

Ignorez la partie qui fait le bot pour le moment et procédez au traitement du langage naturel. ~~ Pour être honnête, c'est l'essence même, vous n'avez donc rien à lire d'autre. ~~ L'essence vient d'ici, mais COTOHA était si incroyable qu'elle s'est terminée bientôt.

Échantillon 1

Pour le moment, acceptez l'entrée et essayez de la traiter légèrement. Il s'agit d'une démo qui reçoit des phrases et ne renvoie que la nomenclature. J'ai fait référence à Masterpiece. La puissance de Library est si incomplète que cela peut être fait sans rien savoir. Tout d'abord, mettez la bibliothèque.

pip install git+https://github.com/obilixilido/cotoha-nlp.git
C'est le code que j'ai créé.

samplecode1.py


from cotoha_nlp.parse import Parser

parser = Parser("Client ID",
  "Client secret",
  "https://api.ce-cotoha.com/api/dev/nlp",
  "https://api.ce-cotoha.com/v1/oauth/accesstokens"
)
s = parser.parse(input())

print(" ".join([token.form for token in s.tokens if token.pos in  ["nom"]]))

Je le publierai à nouveau plus tard, mais j'ai publié l'exemple de code sur GitHub, alors jetez-y également un œil. Exécutons ce code. Si vous entrez dans l'ordre de chaîne de caractères du nom de fichier python, le résultat du traitement de la chaîne de caractères sera renvoyé.

python samplecode1.py Spring est Akebono. Oui, allons à Kyoto.

Ensuite, il reviendra.

>>Printemps Akebono Kyoto

Qu'est-ce que tu penses. Avec autant de code, j'ai pu faire un bon traitement du langage naturel. C'est trop dangereux. ~~ Je ne comprends rien. ~~

Script de conversion Kyoto Ben "Wind" terminé

Ensuite, je voudrais commencer à implémenter le bot Kyoto Benfu. Grattage depuis le site précédent, s'il existe une traduction japonaise qui correspond à la nomenclature extraite, retournez la valve Kyoto. Voici le flux de fabrication à partir d'une entrée japonaise ordinaire. image.png

Je vais gratter, alors je vais mettre dans une petite bibliothèque.

pip3 install requests
pip3 install beautifulsoup4
Cela ressemble à ceci.

bubuduke.py


from cotoha_nlp.parse import Parser
import requests
from bs4 import BeautifulSoup
import re

parser = Parser("Client ID",
  "Client secret",
  "https://api.ce-cotoha.com/api/dev/nlp",
  "https://api.ce-cotoha.com/v1/oauth/accesstokens"
)
# input
s = parser.parse(input())

# get nouns
nouns = [token.form for token in s.tokens if token.pos in  ["nom"]]

# web scraping
r = requests.get('https://iirou.com/kazoekata/')
soup = BeautifulSoup(r.content, "html.parser")
block = soup.find_all("p")

# output
for noun in nouns:
  for tag in block:
    if noun in str(tag):
      #Découpez la valve Kyoto à l'intérieur de l'étiquette forte
      output = re.findall('<strong>.*</strong>', str(tag))
      out = output[0]
      out = out.replace("<strong>", "")
      out = out.replace("</strong>", "")
      print(out)

Exécutez immédiatement.

python bubuduke.py "Ennuyeux"

L'insidieux Kyoto Ben est de retour!

>>«Jeune femme, tu es douée pour jouer du piano»

C'est la fin de la partie traitement du langage naturel. La prochaine fois, je ferai juste un bot. Le genre va changer et cet article se termine ici.

Ce que je veux faire la prochaine fois

Je veux en faire un bot LINE. Je veux améliorer un peu plus la précision. Je veux ramasser des mots qui ne correspondent pas exactement. Il y a très peu de mots qui correspondent jusqu'à présent. J'écrirai à nouveau à ce sujet la prochaine fois.

en conclusion

Dépôt de code utilisé cette fois Référence Après tout, la référence officielle est la meilleure pour n'importe quelle langue, bibliothèque, framework, etc.

Merci d'avoir lu jusqu'au bout. ~~ Je veux trop de prix ~~ LGTM s'il vous plaît. Si LGTM ne l'accepte pas, cette zone Veuillez vous y référer.

Recommended Posts

C'est vrai, mangeons-le. [Traitement du langage naturel à partir de Kyoto Ben]
Profitons du traitement du langage naturel à l'aide de l'API COTOHA
Étudiez le traitement du langage naturel avec Kikagaku
[Traitement du langage naturel] Prétraitement avec le japonais
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
J'ai essayé le traitement du langage naturel avec des transformateurs.
3. Traitement du langage naturel par Python 2-2. Réseau de co-occurrence [mecab-ipadic-NEologd]
[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
Créer un environnement pour le traitement du langage naturel avec Python
Python: traitement du langage naturel
RNN_LSTM2 Traitement du langage naturel
Traitement du langage naturel 3 Continuité des mots
Traitement du langage naturel 2 similitude de mots
Créez facilement un modèle de traitement du langage naturel avec BERT + LightGBM + optuna
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
Résumez comment prétraiter le texte (traitement du langage naturel) avec l'api tf.data.Dataset
Étude de cas sur le traitement du langage naturel: Fréquence des mots dans'Anne avec un E '
[Word2vec] Visualisons le résultat du traitement en langage naturel des avis des entreprises