[PYTHON] Programme pour affaiblir le japonais

introduction

Lorsque je cherchais ce que je voulais sur Amazon, j'ai senti que le niveau des explications japonaises pour les produits suspects s'était amélioré récemment, et j'ai été impressionné par le fait que j'étais enthousiaste à l'idée d'étudier même si le japonais était difficile. J'ai donc décidé de faire un programme pour affaiblir le japonais.

Ce que j'ai utilisé

J'ai utilisé ce qui suit.

Problème de réglage

J'ai défini les modèles japonais suivants selon lesquels les étrangers sont susceptibles de faire des erreurs ou ne peuvent pas juger de différences subtiles dans les nuances.

  1. Mauvais assistant
  2. Écrivez la partie qui devrait être dans la forme passée dans la forme actuelle
  3. Écrivez un mot dans un autre synonyme

1. Mauvais assistant

J'écris ** un article tous les trois mois **. / Les articles qui semblent intéressants aujourd'hui sont alignés sur les tendances **. / JavaScript ** to ** Personnellement, j'aime Python.

Tout semble étrange. Ici, les conditions dans lesquelles se produisent des erreurs dans les mots auxiliaires et des erreurs de sélection sont les suivantes.

・ Applicable uniquement lorsque la partie du mot précédent est "nom" ・ Le modèle d'erreur est le suivant. "" Est "<=>" est "" et "<=>" de "" à "<=>"

Le code ressemble à ceci.

def mistake_ppp(ppp):
    substitute_ppp = ppp
    mistake_set = np.array([["Mais", "Est"],["alors", "À"]["De", "Que"]])
    target_pattern = mistake_set[np.any(mistake_set == ppp, axis = 1)]
    if len(target_pattern) > 0:
        the_other = target_pattern[np.where(target_pattern != ppp)]
        substitute_ppp = the_other[0]
    return substitute_ppp

2. Écrivez la partie qui devrait être dans la forme passée dans la forme actuelle

Quand j'écris une longue phrase en anglais, j'oublie parfois de faire correspondre le système de temps dans la seconde moitié, et je pense que c'est le même sentiment.

Les conditions et les détails de traitement de cette erreur sont les suivants.

・ Lorsque le verbe auxiliaire "ta" apparaît, remplacez le mot qui le précède par la forme courante.

Le code (extrait) ressemble à ceci.

    elif pos == "Verbe auxiliaire" and word == "Ta":
        #Remplacez le mot précédent par le formulaire actuel
        word_list[word_idx - 1] =  basic_list[word_idx - 1]
        xfmd_basic = basic
        xfmd_word = ""

J'ai l'impression d'avoir sauvegardé une liste des mots originaux (word_list) et sa liste standard (basic_list). Le reste est supprimé en remplaçant le verbe auxiliaire "ta" par un caractère vide.

3. Écrivez un mot avec un autre synonyme

** Recherchez des articles qui semblent intéressants **. / La pièce est ** chaude ** car le poêle est attaché. / Répondez aux questions sur l'article **.

Les conditions de cette gestion des erreurs sont les suivantes.

・ La cible de conversion n'est que les verbes, les adjectifs et la nomenclature. ・ Le verbe "to" n'est pas converti. ・ Les synonymes de synonymes se réfèrent à ceux qui ont la même partie et la même forme de base que l'original et doivent être en japonais uniquement.

De plus, le traitement spécifique est le suivant.

  1. Utilisez WordNet pour obtenir une liste de synonymes pour le mot cible
  2. Sélectionnez un synonyme dans la liste des synonymes
  3. Convertissez le formulaire d'utilisation en le même que le mot original et remplacez-le par le mot original

Pour WordNet, j'ai téléchargé et utilisé * Wordnet japonais et WordNet anglais dans une base de données sqlite3 * depuis ici.

Le code pour 2 ressemble à ceci.

def choose_synonym(word):
    synonym = word
    pos, basic = analyze_pos(word)
    synonyms = search_synonyms(word)
    idxs = np.arange(0, len(synonyms), 1)
    np.random.shuffle(idxs)
    for idx in idxs:        
        synonym_pos, synonym_basic = analyze_pos(synonyms[idx])
        if synonym_pos == pos and synonym_basic == basic:
            synonym = synonyms[idx]
            break
    return synonym

Le traitement du contenu et du code de search_synonymes (word) '' qui effectue 1 est susceptible d'être long s'il est écrit ici, donc Structure WordNet et recherche de synonymes ). Veuillez vous y référer pour plus de détails.

En 3, comme il ne pouvait pas être réalisé par la fonction standard de Mecab, les données du formulaire d'utilisation de chaque partie contenue dans les données du dictionnaire (mecab-ipadic-2.7.0-20070801.tar.gz) utilisées dans Mecab sont utilisées. J'ai essayé de l'utiliser.

def transform(pos, basic, conjugate):
    target_word = None
    dict_file = None
    if pos == "verbe":
        dict_file = "Verb"
    elif pos == "adjectif":
        dict_file = "Adj"
    elif pos == "nom":
        dict_file = "Noun"

    with open("../dict/pos/" + dict_file + ".csv", "rb") as f:
        words = f.readlines()
    for w in words:
        winfo = w.decode('euc_jp',errors ='ignore').split(",")
        conj = winfo[9]
        basicform = winfo[10]
        if basicform == basic and conj == conjugate:
            target_word = winfo[0]
            break
    return target_word

J'ai été un peu troublé par le problème de code de caractère lors de la lecture de csv. C'est encore en développement (je ne l'ai pas vu car je n'en ai pas d'autre mais je ne peux pas y aller)

Résumé

Le flux de traitement est résumé ci-dessous. Le nom du sous-processus a été raccourci, mais connaissez-vous la correspondance?

Flow_all.png

Essaie

Je l'ai appliqué à la description (Amazon) des AirPods Pro récemment achetés.


\begin{align*}
&{\Grand bruit muet au son.}\\
&{\petit Le microphone détecte les bruits à l'extérieur et à l'intérieur de l'oreille. La fonction anti-bruit qui équilibre le son élimine le bruit avant l'écoute.}\\
\\
&{\Grand Demandez seulement ce que vous voulez demander.}\\
&{\small Si vous souhaitez écouter le Yoko environnant et y répondre, passez en mode de capture de son externe. Appuyez et maintenez simplement le capteur sensible à la pression.}\\
\\
&{\Grand ajustement personnalisé.}\\
&{\petits Les embouts en silicone confortables et portables sont disponibles en 3 tailles. Les trous d'aération sur les embouts permettent d'équilibrer la pression des deux côtés de l'écouteur.}\\
\\
&{\Grande expérience pour la première fois.}\\
&{\Petit pilote de haut-parleur dédié, amplificateur à plage dynamique élevée, puce H1 sont connectés. Il produit un son de haute qualité qui ne peut être imaginé qu'un boîtier compact.}\\
\\
&{\Grand cadre et Siri. Tout est simple.}\\
&{\petit Très facile à connecter avec l'iPhone. Vous pouvez partager la chanson avec deux ensembles d'AirPod ou demander à Siri de lire le message que vous recevez.}\\
\\
&{\Une charge importante est sans fil. Le plaisir est sans fin.}\\
&{\Avec le petit boîtier de chargement sans fil, vous pouvez aller n'importe où avec vos AirPods Pro. Il est compatible avec les chargeurs standard Qi.}
\end{align*}

J'ai quelques soupçons. Je n'aurais peut-être pas acheté ça.

à la fin

Ce programme en lui-même n'est pas utile, mais je pense qu'il sera utile dans le futur enseignement de la langue japonaise de supprimer les caractéristiques du japonais faible. Les étrangers qui étudient le japonais sont susceptibles de faire des erreurs dans l'apprentissage et de regrouper la tendance à écrire des phrases japonaises, et il semble que chacun d'eux puisse créer un programme d'enseignement de la langue japonaise.

Recommended Posts

Programme pour affaiblir le japonais
Programme pour convertir le japonais en nom de station
Comment démarrer la première projection
Modifier le tofu Ubuntu en environnement japonais
Convertir une partie du nom japonais en synonyme
Python 2.7 Ajout de la documentation japonaise à Dash.app
Programme Shell pour afficher quatre-vingt-dix-neuf
Comment gérer le japonais avec Python
Comment régler l'heure du serveur sur l'heure japonaise
Un guide d'introduction à l'optimisation des performances des programmes
Comment utiliser le japonais avec le tracé NLTK
Comment afficher le japonais python avec lolipop
Programme pour obtenir les images préférées de Twitter
Je veux faire un programme d'automatisation!
Mise en route: 30 secondes de traduction en japonais Keras
Divers commentaires à écrire dans le programme
Comment entrer le japonais avec les malédictions Python