[PYTHON] Un programme qui corrige automatiquement "Takenoko no Sato" en "Kinoko no Yama" "correctement"

Introduction-Introduction de merveilleux bonbons et existence de produits dégradés tardivement-

Comme vous le savez tous, il existe un ** merveilleux bonbon ** appelé "Mushroom Mountain" ** [^ 1]. Il s'agit d'une confiserie au chocolat fabriquée et vendue par Meiji Co., Ltd. depuis 1975. Il a une forme mignonne comme un champignon, la partie de la tige étant un cracker et la partie du parapluie en chocolat. On a dit que la meilleure combinaison avait été essayée et erronée sur une période de développement de 5 ans, donc bien qu'elle soit ** facile à tenir et fonctionnelle **, elle avait beaucoup de chocolat et une salinité et un croustillant modérés. Les craquelins sont combinés pour obtenir le goût suprême **. Meiji-sama, qui a produit de si merveilleux bonbons, ne me soulève vraiment pas.

En revanche, quatre ans après le coup explosif, ** "Takenoko no Sato" **, un ** produit similaire de qualité inférieure ** est apparu. Peut-être parce que la période de développement est courte, le chocolat a été réduit d'environ 30%, la base est un biscuit grumeleux et poudreux qui est difficile à tenir, et l'apparence est un corps en forme de bambou sans caractéristiques ni netteté, et il est facile à comprendre ** retardataire C'est un produit détérioré **. Bien que le montant total ait été réduit de plus de 5%, le prix a été augmenté, et le sel et le shortening ont été augmentés pour compenser la faiblesse du punch, et cela a été critiqué par les pharmaciens ** [^ 2] Je vais. En prime, les œufs sont utilisés et les personnes allergiques ne peuvent pas les manger, donc ** la sécurité est également marquée par × **. Parce que le tas de champignons se vendait tellement, Meiji-sama aurait pu essayer de faire un profit en publiant une ** version à prix réduit **. Puisqu'il s'agit d'une entreprise, certains aspects ne peuvent être aidés. Je voudrais jeter un œil sur le cœur de la personne en charge du développement.

En passant, si vous étudiez le contexte historique comme décrit ci-dessus, rien de ** malentendu ** ne peut se produire, mais parfois ** les nouveaux arrivants ** négligent les faits ci-dessus. Nous pouvons déformer et déclarer qu'il y a un différend entre ces produits. ** C'est effrayant de ne pas savoir. ** ** Les montagnes de champignons sont soutenues par les gens avec une énorme différence dans la dernière enquête à grande échelle [^ 3] en janvier 2020, et il ne devrait y avoir aucun conflit. C'est un fait strict que ** Mushroom Mountain est une existence incomparablement élevée **. Je voulais ** améliorer le monde ** en éliminant l'écriture qui créerait un feu de conflit, contrairement à de tels faits.

Par conséquent, j'ai créé un programme qui corrige automatiquement les erreurs par traitement du langage cette fois, et j'espère que vous l'utiliserez et le diffuserez pour la réalisation de la paix mondiale.

[^ 1]: "Meiji Mushroom Mountain Co., Ltd." https://www.meiji.co.jp/sweets/chocolate/kinotake/products/kinokonoyama/ [^ 2]: "Quel est le meilleur, Mushroom Mountain ou Takenoko no Sato? J'ai demandé au pharmacien." Https://liginc.co.jp/267503 [^ 3]: "Mushroom Mountain / Takenoko no Sato National General Election 2019" ~~ https://www.meiji.co.jp/sweets/chocolate/kinotake/cmp/2019senkyo/~~ Cela semble avoir été supprimé. → https://prtimes.jp/main/html/rd/p/000000012.000025200.html

Exemple de correction d'erreur

Je pense que c'est plus facile à comprendre si vous regardez la réalité, donc je vais d'abord vous montrer un exemple d'opération.

Exemple 1 qui pourrait être corrigé correctement

Par exemple, supposons que vous voyiez le tweet suivant sur Twitter.

Takenoko no Sato est délicieux. Est-ce la nourriture de Dieu?

**Pauvre chose. ** Vous ne connaissez peut-être pas le contexte historique selon lequel il s'agit d'un produit à dégradation tardive, ou vous avez peut-être confondu le nom du produit par inadvertance. Si de telles ** informations préjudiciables ** sont diffusées au public, on craint qu'elles aient un effet néfaste sur les jeunes et qu'elles soient délinquantes à l'avenir, veuillez donc les corriger correctement.

$ python correct_mistakes.py "Takenoko no Sato est délicieux. Est-ce la nourriture de Dieu?"
Résultat de la correction:La montagne aux champignons est délicieuse. Est-ce la nourriture de Dieu?

De cette façon, j'ai pu réviser la phrase ** pour être convaincante pour tout le monde **.

Exemple 2 qui pourrait être corrigé correctement

Ensuite, supposons que vous voyiez l'avis suivant sur Amazon.

L'harmonie entre le chocolat et le fond est magnifique. Takenoko no Sato est inégalé par les autres sucreries. ☆ 5.

** C'est triste. ** Le ministère de l'Éducation, de la Culture, des Sports, de la Science et de la Technologie, qui n'inclut pas le processus d'acquisition de connaissances correctes dans les matières obligatoires de l'école élémentaire, peut être mauvais. Diffuser des informations incorrectes en l'état est interdit par la loi, ce qui est appelé ** diffusion de rumeurs **. De plus, écrire des informations que les gens n'aiment pas dans les lieux publics perturbe la morale et la morale de la société et peut aussi être du ** harcèlement **, alors corrigez-les pour que la personne qui les a écrites ne subisse aucun inconvénient. Je te le donnerai.

$ python correct_mistakes.py "L'harmonie entre le chocolat et le fond est magnifique. Takenoko no Sato est inégalé par les autres sucreries. ☆ 5."
Résultat de la correction:L'harmonie entre le chocolat et le fond est magnifique. Les montagnes de champignons sont inégalées par d'autres sucreries. ☆ 5.

C'est vrai. Je suis complètement d'accord. Vous avez effectué une évaluation objective sans biais **.

Exemple 3 qui pourrait être corrigé correctement

Comme autre exemple, supposons que vous voyez le commentaire suivant.

La montagne de champignons est mauvaise.

Si vous êtes un adulte mûr décent, écrire quelque chose comme ce qui précède est ** impossible ou inacceptable **, mais je pensais avoir accidentellement mangé la version complète originale en mangeant un produit détérioré par la suite. Cela peut finir. Je suis humain. Vous pouvez faire une erreur. En appliquant le programme de manière entièrement automatique, vous pouvez éliminer ces ** erreurs humaines ** et rendre le monde meilleur.

$ python correct_mistakes.py "La montagne de champignons est mauvaise"
Résultat de la correction:Le village de Takenoko est mauvais.

Je pense qu’il vaut mieux avoir un cœur généreux sans en faire trop, mais la ** liberté d’expression ** est garantie par la Constitution, je voudrais donc accepter une telle opinion. pense. Il est important de reconnaître les différences de chacun et de ** maintenir la diversité **.

la mise en oeuvre

Si vous êtes un lecteur avisé, vous avez peut-être déjà appuyé sur le bouton ** "J'aime" ** au moment où vous lirez jusqu'ici, mais je présenterai l'implémentation juste au cas où.

Le simple remplacement des chaînes "Mushroom Mountain" et "Takenoko no Sato" ne fonctionnera pas. La raison en est, tout d'abord ** "Cette montagne est dangereuse en cas d'incendie" ** (Cette montagne est dangereuse en cas d'incendie) ** "Satomi boy qui a été frappé par cette fille" ** (Satomi boy qui a été frappé par cet enfant) Lorsqu'une telle phrase arrive, il est possible que la mauvaise conversion soit effectuée sans tenir compte du délimiteur. Ensuite, cela correspond au ** blasphème ** à la montagne de champignons, il faut donc bien extraire «montagne de champignons» et «sato de bambou» comme nomenclature propre. Deuxièmement, le processus doit être divisé selon qu'il est complimenté ou désapprouvé. ** Si vous en faites l'éloge, vous pouvez certainement juger qu'il s'agit de "Mushroom Mountain" **, et si vous le félicitez, vous pouvez juger que ce n'est pas "Mushroom Mountain" **.

Nous les implémentons bien en effectuant le ** traitement du langage naturel **. Il existe différentes manières d'effectuer le traitement du langage naturel, mais cette fois j'utiliserai l 'API COTOHA.

En passant, ** Qiita **, qui écrit cet article, et ** NTT Communications Co., Ltd. **, le développeur de l'API COTOHA, ont été confirmés comme étant ** Mushroom Mountains . Je vais. Actuellement, les deux sociétés collaborent à une campagne, et l'un des prix est "Campagne". C'est parce qu'il inclut " Faites un tas de champignons **" (+ iPad). En conséquence, les lecteurs de Qiita peuvent comprendre que ** tous les champignons sont recommandés **, vous pouvez donc écrire cet article en toute confiance.

Au fait, il existe de nombreuses fonctions de traitement du langage fournies par l'API COTOHA, mais cette fois, nous utiliserons «l'API d'extraction de nomenclature propriétaire» et «l'API d'estimation des émotions».

  1. Déterminez si "Mushroom Mountain" et "Takenoko no Sato" sont inclus dans l'API de nomenclature appropriée
  2. Jugez si elle est négative ou positive avec l'API d'estimation des émotions dans la phrase incluse, ** Si "Mushroom mountain" est inclus et négatif, remplacez la chaîne de caractères **, ** "Takenoko no Sato" S'il est inclus et positif, remplacez la chaîne de caractères ** Le processus est exécuté. Cette fois, nous avons utilisé Score = 0,5 comme seuil pour juger s'il était positif ou négatif.
Code ci-dessous (cliquez pour développer)

correct_mistakes.py



import requests
import json
import sys

BASE_URL = "https://api.ce-cotoha.com/api/dev/"
CLIENT_ID = "ID obtenu par l'API COTOHA"
CLIENT_SECRET = "PASS obtenu avec l'API COTOHA"


def auth(client_id, client_secret):
    token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8"
    }

    data = {
        "grantType": "client_credentials",
        "clientId": client_id,
        "clientSecret": client_secret
    }
    r = requests.post(token_url,
                      headers=headers,
                      data=json.dumps(data))
    return r.json()["access_token"]

def ne(sentence, access_token):
    base_url = BASE_URL
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }
    data = {
        "sentence": sentence,
    }
    r = requests.post(base_url + "nlp/v1/ne",
                      headers=headers,
                      data=json.dumps(data))
    return r.json()


def sentiment(sentence, access_token):
    base_url = BASE_URL
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }
    data = {
        "sentence": sentence,
    }
    r = requests.post(base_url + "nlp/v1/sentiment",
                      headers=headers,
                      data=json.dumps(data))
    return r.json()


if __name__ == "__main__":
    sentence = "La montagne de champignons est délicieuse. Est-ce la nourriture de Dieu?"
    args = sys.argv
    if len(args) >= 2:
        sentence = str(args[1])

    access_token = auth(CLIENT_ID, CLIENT_SECRET)

    kinoko_flg=False
    kinoko_begin_pos=0
    takenoko_flg=False
    takenoko_begin_pos=0
    suginoko_flg=False

    ne_result  = ne(sentence,access_token)
    sentiment_result  = sentiment(sentence,access_token)

    for chunks in ne_result['result']:
      if chunks['form'] == "Montagne de champignons":
        kinoko_flg = True
        kinoko_begin_pos = chunks['begin_pos']
      elif chunks['form'] == "Takenoko no Sato":
        takenoko_flg = True    
        takenoko_begin_pos = chunks['begin_pos'] 
      elif chunks['form'] == "Village de Suginoko":
        suginoko_flg = True    
  
    if kinoko_flg == True and sentiment_result['result']['sentiment'] == "Negative" and sentiment_result['result']['score'] > 0.5:
      print(sentence[:kinoko_begin_pos] + 'Takenoko no Sato' + sentence[kinoko_begin_pos+5:])
    elif takenoko_flg ==True and sentiment_result['result']['sentiment'] == "Positive" and sentiment_result['result']['score'] > 0.5:
      print(sentence[:takenoko_begin_pos] + 'Montagne de champignons' + sentence[takenoko_begin_pos+6:])
    elif suginoko_flg == True:
      print("Qui êtes vous")
    else:
      print(sentence)

Divers résultats

$ python correct_mistakes.py "J'adore Takenoko no Sato"
J'adore la montagne de champignons
$ python correct_mistakes.py "Mushroom Mountain est le meilleur! C'est super de manger d'abord du chocolat et de ne manger que des biscuits!"
Mushroom Mountain est le meilleur! C'est super de manger d'abord du chocolat et de ne manger que des biscuits!
$ python correct_mistakes.py "Je mange ce village de Takenoko"
Je mange une montagne de champignons maintenant
$ python correct_mistakes.py "Je peux le manger sans me salir les mains"
Je peux le manger sans me salir les mains
$ python correct_mistakes.py "Je n'ai pas besoin d'une montagne de champignons parce que c'est bon marché."
Je n'ai pas besoin de Takenoko no Sato parce que c'est bon marché.
#Ajouter un exemple dans la section des commentaires(2/25)
$ python correct_mistakes.py "Les algues de cette montagne Yamamoto à cette époque étaient les pires"
Les algues de cette montagne Yamamoto à cette époque étaient les pires
$ python correct_mistakes.py "Village de Suginoko"
Qui êtes vous

Résumé

J'ai pu créer un programme qui corrige automatiquement la notation à la bonne. En appliquant ce programme aux systèmes et aux applications partout et en l'appliquant de manière entièrement automatique, vous pouvez ** améliorer la société et créer un monde pacifique sans conflit **. Je pense que la meilleure chose est que le ** fournisseur ** applique ce programme et ** corrige tout le texte qui est communiqué **, donc j'ai fait une telle ** loi ** pour le gouvernement. J'aimerais l'avoir. Tout le monde peut contribuer à des activités visant à rendre le monde pacifique en l'utilisant dans divers endroits tels que Slack, Twitter, les systèmes commerciaux et les macros internes, alors veuillez coopérer.

De plus, je pense que la personne en charge du développement de l'API COTOHA peut contribuer à la société en fournissant cette fonction elle-même en tant qu'API et peut également l'écrire en tant que ** CSR **, alors pensez à fournir un tel service par tous les moyens. S'il te plait donne moi. Aussi, donnez-moi "Faisons! Montagne aux champignons" et le ** Prix supplémentaire iPad **.

Enfin, j'espère que ce texte atteindra tous ceux qui vont avoir un différend et y réfléchira.

Recommended Posts