[Python] J'ai créé une application pour pratiquer la délicate distinction vocale des mots anglais.

Synopsis

Une histoire où une personne locale tenant un chaton parlait en anglais lors d'un voyage à l'étranger.

Etranger "Comment dire" cuisine "en japonais?" Je "(?? Pourquoi entendez-vous soudainement ça ...) DAIDOKORO" Étranger "?? ...? Quoi?" Moi-même "DAIDOKORO!" Étranger "... Oh, DAIDOKORO! OK! DAIDOKORO!"

À une date ultérieure

J'ai dit: "Il y avait quelque chose comme ça. Je me demande pourquoi j'ai entendu ça." Mon ami "C'était un chaton au lieu de la cuisine, n'est-ce pas? Vous aviez un chaton, non? " J'ai dit: "Oh, chaton! C'est un chaton! J'ai fait une erreur car la prononciation est similaire à celle de la cuisine! hahaha "

Mon amie "..."

Je "Étudions l'anglais ..."

Ce que tu veux faire

Afficher deux mots avec une prononciation similaire à l'écran, Lisez l'un ou l'autre des fichiers audio au hasard. Sélectionnez le mot que l'utilisateur estime avoir été prononcé, Affichez la réponse correcte ou incorrecte à l'écran.

En outre, diverses paires de mots avec des symboles de prononciation similaires Recueillir par symbole de prononciation et distinguer quel symbole de prononciation Défiez ou permettez à l'utilisateur de choisir.

Par exemple, la différence entre «r» et «l» qui inquiète de nombreuses personnes, y compris moi-même Supposons que vous vouliez apprendre.

Lorsque vous démarrez le jeu, par exemple, soit la voix claire soit la voix droite Joué au hasard et sélectionnez celui que vous pensez avoir été joué.

Ensuite, la réponse correcte ou la réponse incorrecte s'affiche.

À propos, comme indiqué ci-dessous, les mots light et right sont les premiers Ils sont exactement les mêmes sauf que les symboles phonétiques sont l et r.

mot Symbole de prononciation
light lάɪt
right rάɪt

Environnement de développement

Téléchargez également le fichier audio des mots anglais utilisés dans cet outil depuis weblio. Cependant, il est très difficile de télécharger un par un de nombreux fichiers de mots anglais. Ça prend.

Par conséquent, j'ai créé un outil pour télécharger automatiquement des mots anglais par web scraping. ↓ https://qiita.com/Fuminori_Souma/private/60ce627e66209763d4f2

Avec cet outil, vous pouvez facilement télécharger le fichier audio de votre choix. Cependant, le fichier audio du mot décrit dans le fichier json de cet outil est publié sur Google Drive (décrit plus loin).

Ce que j'ai réellement fait

L'écran immédiatement après l'exécution ressemble à ceci. 1.png

Aujourd'hui, je vais essayer de faire la distinction entre «et», pour lesquels les Japonais ne sont pas doués. 2.png

Lorsque vous appuyez sur le bouton "Démarrer le jeu", l'écran passe à l'écran de jeu. Y a-t-il un total de 14 questions? 3.png

Lorsque j'ai appuyé sur le bouton "Play Audio", le fichier audio a été lu et deux options sont apparues. Je me demande lequel a été prononcé. .. Appuyez sur le bouton "Play Again" et écoutez à nouveau. D'accord, le temps à gauche! Cliquez sur le texte "tendu" pour répondre. 4.png

Excellente réponse! Tu l'as fait. Cliquez sur "tendu" et "dixième" pour jouer et chacun Vérifions la différence audio. Lorsque vous avez terminé, appuyez sur le bouton "Démarrer le problème suivant". 5.png

Cette fois "souris" et "bouche"? D'accord, bouche! 6.png

... n'est-ce pas? bon sang! 7.png

... tout est fini. 7 réponses correctes sur 14? Eh bien, c'est bon (transpiration) Appuyez sur le bouton "Retour au titre". 8.png

Ensuite, essayons de faire la distinction entre «b» et «v». 1.png

Je l'utilise comme ça.

fichier source

English_study.py


import sys
import tkinter
from tkinter import messagebox
from mutagen.mp3 import MP3 as mp3
from tkinter import *
import pygame
import time
import json
import random
from PIL import Image, ImageTk


def ques_start_next(event): #Commencer le problème/Écouter à nouveau l'audio/Commencer le problème suivant

    if bttn_repnxt['text'] == 'Lire l'audio':

        global word1
        global word2
        global rep_word #Mots réellement prononcés
        global id

        text_res["text"] = '' #Réinitialiser la réponse à la question précédente

        group = ps
        words = random.choice(list(wordlist['Wordlist'][group]))

        id = 'id' + str(quorder[qunum - renum])

        word1 = (wordlist['Wordlist'][group][id]['word1'])
        word2 = (wordlist['Wordlist'][group][id]['word2'])
        rep_word = wordlist['Wordlist'][group][id][random.choice(list(wordlist['Wordlist'][group][words]))]

        rep_mp3(rep_word)  #Lire le fichier audio

        #Changer l'état de l'objet
        text_w1["text"] = word1
        text_w2["text"] = word2
        text_ques1["text"] = 'Ce qui a été prononcé ...'
        text_ques2["text"] = 'Laquelle?'
        bttn_repnxt['text'] = 'Rejouer'
        text_adc.place_forget()

    elif bttn_repnxt['text'] == 'Rejouer':

        rep_mp3(rep_word)  #Lire le fichier audio

    else:  # 'Commencer le problème suivant'

        #Changer l'état de l'objet
        bttn_repnxt['text'] = 'Lire l'audio'
        text_res.place_forget()

        #Lancer le problème suivant (lire le fichier audio)
        ques_start_next(event)


def rep_mp3(tgt_word):  #Lire l'audio

    filename = 'C:/Users/fumin/OneDrive/bureau/English_words/' + tgt_word + '.mp3'  #Le fichier mp3 que vous souhaitez lire
    pygame.mixer.init()
    pygame.mixer.music.load(filename)  #Charger la source sonore
    mp3_length = mp3(filename).info.length  #Obtenez la longueur de la source sonore
    pygame.mixer.music.play(1)  #La lecture démarre. Jouez n fois si la partie 1 est modifiée(Dans ce cas, xn également le nombre de secondes sur la ligne suivante.)
    time.sleep(mp3_length + 0.25)  #Après avoir démarré la lecture, attendez la durée de la source sonore(0.Attendre 25 est l'élimination des erreurs)
    pygame.mixer.music.stop()  #La lecture s'arrête après avoir attendu la durée de la source sonore


def enlarge_word(event):  #Mot plus grand avec le pointeur de la souris

    if str(event.widget["text"]) == word1:
        text_w1["font"] = ("", 12)   #Caractères plus grands
        text_w1["cursor"] = "hand2"  #Changer le pointeur de la souris en type d'index
    else:
        text_w2["font"] = ("", 12)   #Caractères plus grands
        text_w2["cursor"] = "hand2"  #Changer le pointeur de la souris en type d'index


def undo_word(event):  #Restaure les mots qui sont hors du pointeur de la souris à leur taille d'origine

    if str(event.widget["text"]) == word1:
        text_w1["font"] = ("", 10)  #Afficher les caractères en première taille
    else:
        text_w2["font"] = ("", 10)  #Afficher les caractères en première taille


def choose_word(event):  #Déterminer si le mot sélectionné par l'utilisateur est correct

    global oknum
    global renum

    if bttn_repnxt['text'] == 'Rejouer':

        #Afficher les bonnes réponses et notes
        text_res.place(x=175, y=130)
        text_adc.place(x=130, y=160)

        if str(event.widget["text"]) == word1:  #Si vous sélectionnez le mot à gauche

            if rep_word == word1:
                text_res["text"] = 'Bonne réponse!!'
            else:
                text_res["text"] = 'Réponse incorrecte…'

        else:  #Si vous sélectionnez le mot à droite

            if rep_word == word2:
                text_res["text"] = 'Bonne réponse!!'
            else:
                text_res["text"] = 'Réponse incorrecte…'

        if text_res["text"] == 'Bonne réponse!!':

            oknum = oknum + 1  #Ajouter le nombre de bonnes réponses
            text_res["foreground"] = 'blue'
        else:
            text_res["foreground"] = 'red'

        renum -= 1  #Soustrayez le nombre de questions restantes

        #Changer l'état de l'objet
        text_scr['text'] = 'But:' + str(oknum) + '/' + str(qunum)
        text_rest['text'] = 'restant:' + str(renum)
        text_ques1["text"] = ''
        text_ques2["text"] = ''
        bttn_repnxt["text"] = 'Commencer le problème suivant'

        if renum == 0:  #Quand tous les problèmes sont terminés
            bttn_repnxt.place_forget()
            text_end.place(x=110, y=320)

    elif bttn_repnxt['text'] == 'Commencer le problème suivant':  #Lire l'audio pour le prochain numéro

        if str(event.widget["text"]) == word1:

            rep_mp3(wordlist['Wordlist'][ps][id]['word1'])
        else:
            rep_mp3(wordlist['Wordlist'][ps][id]['word2'])


def create_radioboutton(row, column, pdx, num, value):  #Générer un bouton radio sur l'écran titre

    rdbtn[num] = tkinter.Radiobutton(frame, value=value, command=rb_clicked, variable=var, text=u'')
    rdbtn[num].grid(row=row, column=column, padx=0, ipadx=pdx, pady=yinvl)


def create_picture(row='df', column='df', pdx='df', num='df'):  #Symboles de prononciation sur l'écran titre(image)Générer un

    if row == 'df' and column == 'df'and pdx == 'df'and num == 'df':  #Pour l'écran titre

        cv[rbnum] = Canvas(width=70, height=20)
        cv[rbnum].create_image(1, 1, image=pngfile[rbnum], anchor=NW)
        cv[rbnum].place(x=195, y=25)

    else:  #Dans le cas de l'écran de démarrage du jeu
        cv[num] = Canvas(frame, width=70, height=20)
        cv[num].create_image(1, 1, image=pngfile[num], anchor=NW)
        cv[num].grid(row=row, column=column, ipadx=pdx, pady=yinvl)


def rb_clicked():  #Sélectionnez un symbole de prononciation à étudier

    global rbnum
    global ps

    rbnum = int(var.get())  #Bouton radio sélectionné(=Symbole de prononciation)Stocker le nombre de
    ps = list(wordlist['Wordlist'])[rbnum]  #Sélectionnez le symbole de prononciation sélectionné


def switch_mode(event):  #Commencer le jeu/Revenir à l'écran titre

    global qunum    #Nombre total de problèmes
    global oknum    #Nombre de bonnes questions
    global renum    #Nombre de problèmes restants
    global quorder  #Ordre des questions de questions

    if bttn_swmode['text'] == 'début du jeu':

        #Masquer l'objet qui était sur le premier écran
        frame.place_forget()
        text_title.place_forget()
        text_ques3.place_forget()

        #Afficher les objets pour le jeu
        bttn_repnxt.place(x=155, y=70)
        text_scr.place(x=200, y=250)
        text_rest.place(x=130, y=250)
        text_w1.place(x=128, y=190)
        text_w2.place(x=228, y=190)
        text_ps.place(x=135, y=28)
        text_ques1.place(x=160, y=130)
        text_ques2.place(x=175, y=160)
        create_picture()

        #divers paramètres
        oknum = 0
        qunum = len(wordlist['Wordlist'][ps])
        renum = qunum
        text_scr['text'] = 'But:' + str(oknum) + '/' + str(qunum)
        text_rest['text'] = 'restant:' + str(renum)
        quorder = random.sample(range(1, qunum + 1), k=qunum)
        bttn_swmode['text'] = 'Retour au titre'
        text_w1["text"] = ''
        text_w2["text"] = ''
        text_ques1["text"] = ''
        text_ques2["text"] = ''
        bttn_repnxt['text'] = 'Lire l'audio'

    else:  #Revenir à l'écran titre

        if renum == 0 or (renum != 0 and messagebox.askyesno('Vérification', 'Il y a encore des problèmes. Voulez-vous revenir à l'écran titre?')):

            # if messagebox.askyesno('Vérification', 'Il y a encore des problèmes. Voulez-vous revenir à l'écran titre?'):

            #Masquer les objets qui étaient sur l'écran de jeu
            bttn_repnxt.place_forget()
            text_scr.place_forget()
            text_rest.place_forget()
            text_w1.place_forget()
            text_w2.place_forget()
            text_ps.place_forget()
            text_ques1.place_forget()
            text_ques2.place_forget()
            text_end.place_forget()
            text_res.place_forget()
            text_adc.place_forget()
            cv[rbnum].place_forget()

            #Afficher les objets pour l'écran titre
            frame.place(x=90, y=90)
            text_title.place(x=110, y=30)
            text_ques3.place(x=90, y=65)
            bttn_swmode['text'] = 'début du jeu'


#Écran d'affichage
root = tkinter.Tk()
root.title(u"Prononciation")
root.geometry("400x420")
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

# Frame
frame = tkinter.Frame(root)
frame.place(x=90, y=90)
frame.columnconfigure(0, weight=1)
frame.rowconfigure(0, weight=1)

#Paramètres d'étiquette
text_w1 = tkinter.Label(text=u'', font=("", 10))
text_w1.bind("<Enter>", enlarge_word)
text_w1.bind("<Leave>", undo_word)
text_w1.bind("<Button-1>", choose_word)
text_w2 = tkinter.Label(text=u'', font=("", 10))
text_w2.bind("<Enter>", enlarge_word)
text_w2.bind("<Leave>", undo_word)
text_w2.bind("<Button-1>", choose_word)
text_ques1 = tkinter.Label(text=u'')
text_ques2 = tkinter.Label(text=u'')
text_ques3 = tkinter.Label(text=u'Sélectionnez un symbole phonétique et démarrez le jeu.')
text_ques3.place(x=90, y=65)
text_ps = tkinter.Label(text=u'Symbole de prononciation:')
text_adc = tkinter.Label(text=u'* Cliquez sur chaque mot pour jouer la voix')
text_res = tkinter.Label(text=u'')
text_scr = tkinter.Label(text=u'')
text_rest = tkinter.Label(text=u'')
text_title = tkinter.Label(text=u'Prononciation(Temporaire)', font=(u'MS demain matin', 20))
text_title.place(x=110, y=30)
text_end = tkinter.Label(text=u'Le jeu avec ce symbole de prononciation est terminé.')
text_end["foreground"] = 'green'

#Paramètres du bouton poussoir
bttn_repnxt = tkinter.Button(text=u'Lire l'audio', width=11)
bttn_repnxt.bind("<Button-1>", ques_start_next)  # (Button-2 pour le clic de roue, 3 pour le clic droit)
bttn_swmode = tkinter.Button(text=u'début du jeu', width=10)
bttn_swmode.bind("<Button-1>", switch_mode)  # (Button-2 pour le clic de roue, 3 pour le clic droit)
bttn_swmode.place(x=157, y=380)

#Définition des paramètres utilisés pour le placement des boutons radio
xinvl = 30
yinvl = 0
var = StringVar()
var.set('0')  #Réglez le bouton radio sur "non coché"
f = open("C:/Users/fumin/OneDrive/bureau/Wordlist.json", 'r')
wordlist = json.load(f)
oknum = 0
rb_clicked()  #Bouton radio sélectionné dans l'état initial

#Initialisation des variables qui stockent les informations d'image et les informations de bouton radio
pngfile = [''] * len(wordlist['Wordlist'])
cv = [''] * len(wordlist['Wordlist'])
rdbtn = [''] * len(wordlist['Wordlist'])

#Boutons radio/Réglage du symbole de prononciation
for i in range(int(len(wordlist['Wordlist'])/2)):

    ipadx = 10

    pngfile[i*2] = PhotoImage(file="C:/Users/fumin/OneDrive/image/" + list(wordlist['Wordlist'])[i * 2] + ".PNG")
    pngfile[i*2+1] = PhotoImage(file="C:/Users/fumin/OneDrive/image/" + list(wordlist['Wordlist'])[i * 2 + 1] + ".PNG")

    create_radioboutton(i+1, 1, 0, i*2, i*2)
    create_picture(i+1, 2, ipadx, i*2)
    create_radioboutton(i+1, 3, 0, i*2+1, i*2+1)
    create_picture(i+1, 4, ipadx, i*2+1)

root.mainloop()

Fichier de stockage d'informations de mot anglais

Wordlist.json


{
  "Wordlist": {
        "b_v" : {
      "id1" : {
        "word1": "boat",
        "word2": "vote"
      },
      "id2" : {
        "word1": "bury",
        "word2": "vary"
      },
      "id3" : {
        "word1": "base",
        "word2": "vase"
      },
      "id4" : {
        "word1": "bent",
        "word2": "vent"
      },
      "id5" : {
        "word1": "ban",
        "word2": "van"
      },
      "id6" : {
        "word1": "best",
        "word2": "vest"
      },
      "id7" : {
        "word1": "bat",
        "word2": "vat"
      }
    },
    "l_r" : {
      "id1" : {
        "word1": "light",
        "word2": "right"
      },
      "id2" : {
        "word1": "lice",
        "word2": "rice"
      },
      "id3" : {
        "word1": "long",
        "word2": "wrong"
      },
      "id4" : {
        "word1": "lock",
        "word2": "rock"
      },
      "id5" : {
        "word1": "lane",
        "word2": "rain"
      },
      "id6" : {
        "word1": "lend",
        "word2": "rend"
      },
      "id7" : {
        "word1": "lead",
        "word2": "read"
      },
      "id8" : {
        "word1": "loom",
        "word2": "room"
      },
      "id9" : {
        "word1": "lace",
        "word2": "race"
      },
      "id10" : {
        "word1": "lack",
        "word2": "rack"
      },
      "id11" : {
        "word1": "lake",
        "word2": "rake"
      },
      "id12" : {
        "word1": "lamp",
        "word2": "ramp"
      },
      "id13" : {
        "word1": "lank",
        "word2": "rank"
      },
      "id14" : {
        "word1": "late",
        "word2": "rate"
      },
      "id15" : {
        "word1": "law",
        "word2": "raw"
      },
      "id16" : {
        "word1": "clown",
        "word2": "crown"
      },
      "id17" : {
        "word1": "folk",
        "word2": "fork"
      },
      "id18" : {
        "word1": "glamour",
        "word2": "grammar"
      },
      "id19" : {
        "word1": "flee",
        "word2": "free"
      },
      "id20" : {
        "word1": "allow",
        "word2": "arrow"
      },
      "id21" : {
        "word1": "belly",
        "word2": "berry"
      },
      "id22" : {
        "word1": "blanch",
        "word2": "branch"
      },
      "id23" : {
        "word1": "bland",
        "word2": "brand"
      },
      "id24" : {
        "word1": "bravely",
        "word2": "bravery"
      },
      "id25" : {
        "word1": "bleach",
        "word2": "breach"
      },
      "id26" : {
        "word1": "bleed",
        "word2": "breed"
      },
      "id27" : {
        "word1": "blink",
        "word2": "brink"
      },
      "id28" : {
        "word1": "bully",
        "word2": "burly"
      },
      "id29" : {
        "word1": "collect",
        "word2": "correct"
      },
      "id30" : {
        "word1": "flesh",
        "word2": "fresh"
      }
    },
    "crt_ash" : {
      "id1" : {
        "word1": "bug",
        "word2": "bag"
      },
      "id2" : {
        "word1": "fun",
        "word2": "fam"
      },
      "id3" : {
        "word1": "tusk",
        "word2": "task"
      },
      "id4" : {
        "word1": "much",
        "word2": "match"
      },
      "id5" : {
        "word1": "buck",
        "word2": "back"
      },
      "id6" : {
        "word1": "crush",
        "word2": "crash"
      },
      "id7" : {
        "word1": "suck",
        "word2": "sack"
      },
      "id8" : {
        "word1": "stuff",
        "word2": "staff"
      },
      "id9" : {
        "word1": "mud",
        "word2": "mad"
      },
      "id10" : {
        "word1": "musk",
        "word2": "mask"
      },
      "id11" : {
        "word1": "lump",
        "word2": "lamp"
      },
      "id12" : {
        "word1": "bung",
        "word2": "bang"
      },
      "id13" : {
        "word1": "hut",
        "word2": "hat"
      },
      "id14" : {
        "word1": "rump",
        "word2": "ramp"
      },
      "id15" : {
        "word1": "uncle",
        "word2": "ankle"
      },
      "id16" : {
        "word1": "muster",
        "word2": "master"
      },
      "id17" : {
        "word1": "bund",
        "word2": "band"
      },
      "id18" : {
        "word1": "puppy",
        "word2": "pappy"
      },
      "id19" : {
        "word1": "double",
        "word2": "dabble"
      },
      "id20" : {
        "word1": "hunk",
        "word2": "hank"
      },
      "id21" : {
        "word1": "stunned",
        "word2": "stand"
      }
    },
    "ash_alfa" : {
      "id1" : {
        "word1": "pappy",
        "word2": "poppy"
      },
      "id2" : {
        "word1": "adapt",
        "word2": "adopt"
      },
      "id3" : {
        "word1": "bag",
        "word2": "bog"
      },
      "id4" : {
        "word1": "back",
        "word2": "bock"
      },
      "id5" : {
        "word1": "sack",
        "word2": "sock"
      },
      "id6" : {
        "word1": "mask",
        "word2": "mosque"
      },
      "id7" : {
        "word1": "hat",
        "word2": "hot"
      },
      "id8" : {
        "word1": "ramp",
        "word2": "romp"
      },
      "id9" : {
        "word1": "band",
        "word2": "bond"
      },
      "id10" : {
        "word1": "possible",
        "word2": "passable"
      },
      "id11" : {
        "word1": "sad",
        "word2": "sod"
      },
      "id12" : {
        "word1": "tap",
        "word2": "top"
      },
      "id13" : {
        "word1": "nat",
        "word2": "not"
      },
      "id14" : {
        "word1": "hank",
        "word2": "honk"
      },
      "id15" : {
        "word1": "bax",
        "word2": "box"
      },
      "id16" : {
        "word1": "valley",
        "word2": "volley"
      },
      "id17" : {
        "word1": "sax",
        "word2": "sox"
      }
    },
    "alfa_crt" : {
      "id1" : {
        "word1": "body",
        "word2": "buddy"
      },
      "id2" : {
        "word1": "wander",
        "word2": "wonder"
      },
      "id3" : {
        "word1": "soccer",
        "word2": "sucker"
      },
      "id4" : {
        "word1": "poppy",
        "word2": "puppy"
      },
      "id5" : {
        "word1": "bond",
        "word2": "bund"
      },
      "id6" : {
        "word1": "romp",
        "word2": "rump"
      },
      "id7" : {
        "word1": "hot",
        "word2": "hut"
      },
      "id8" : {
        "word1": "mosque",
        "word2": "musk"
      },
      "id9" : {
        "word1": "sock",
        "word2": "suck"
      },
      "id10" : {
        "word1": "bock",
        "word2": "buck"
      },
      "id11" : {
        "word1": "bog",
        "word2": "bug"
      },
      "id12" : {
        "word1": "collar",
        "word2": "color"
      },
      "id13" : {
        "word1": "rob",
        "word2": "rub"
      },
      "id14" : {
        "word1": "honk",
        "word2": "hunk"
      },
      "id15" : {
        "word1": "calm",
        "word2": "come"
      },
      "id16" : {
        "word1": "coddle",
        "word2": "cuddle"
      }
    },
    "s_th" : {
      "id1" : {
        "word1": "sink",
        "word2": "think"
      },
      "id2" : {
        "word1": "sick",
        "word2": "thick"
      },
      "id3" : {
        "word1": "sing",
        "word2": "thing"
      },
      "id4" : {
        "word1": "sought",
        "word2": "thought"
      },
      "id5" : {
        "word1": "sank",
        "word2": "thank"
      },
      "id6" : {
        "word1": "seam",
        "word2": "theme"
      },
      "id7" : {
        "word1": "sin",
        "word2": "thin"
      },
      "id8" : {
        "word1": "mouse",
        "word2": "mouth"
      },
      "id9" : {
        "word1": "tense",
        "word2": "tenth"
      },
      "id10" : {
        "word1": "force",
        "word2": "forth"
      },
      "id11" : {
        "word1": "worse",
        "word2": "worth"
      },
      "id12" : {
        "word1": "face",
        "word2": "faith"
      },
      "id13" : {
        "word1": "boss",
        "word2": "both"
      },
      "id14" : {
        "word1": "mass",
        "word2": "math"
      }
    },
    "oo-lvc_ou" : {
      "id1" : {
        "word1": "called",
        "word2": "cold"
      },
      "id2" : {
        "word1": "raw",
        "word2": "row"
      },
      "id3" : {
        "word1": "law",
        "word2": "low"
      },
      "id4" : {
        "word1": "call",
        "word2": "coal"
      },
      "id5" : {
        "word1": "hall",
        "word2": "hole"
      },
      "id6" : {
        "word1": "tall",
        "word2": "toll"
      },
      "id7" : {
        "word1": "bawl",
        "word2": "bowl"
      },
      "id8" : {
        "word1": "tall",
        "word2": "tole"
      },
      "id9" : {
        "word1": "lawn",
        "word2": "loan"
      },
      "id10" : {
        "word1": "pawl",
        "word2": "pole"
      },
      "id11" : {
        "word1": "ball",
        "word2": "bole"
      },
      "id12" : {
        "word1": "caught",
        "word2": "coat"
      }
    },
    "alfa-hschwa_hschwa-lvc" : {
      "id1" : {
        "word1": "heart",
        "word2": "hurt"
      },
      "id2" : {
        "word1": "hard",
        "word2": "heard"
      },
      "id3" : {
        "word1": "carve",
        "word2": "curve"
      },
      "id4" : {
        "word1": "lark",
        "word2": "lurk"
      },
      "id5" : {
        "word1": "bard",
        "word2": "bird"
      },
      "id6" : {
        "word1": "far",
        "word2": "fur"
      },
      "id7" : {
        "word1": "park",
        "word2": "perk"
      }
    },
    "ash_e" : {
      "id1" : {
        "word1": "adapt",
        "word2": "adept"
      },
      "id2" : {
        "word1": "parish",
        "word2": "perish"
      },
      "id3" : {
        "word1": "marry",
        "word2": "merry"
      },
      "id4" : {
        "word1": "back",
        "word2": "beck"
      },
      "id5" : {
        "word1": "band",
        "word2": "bend"
      },
      "id6" : {
        "word1": "nat",
        "word2": "net"
      },
      "id7" : {
        "word1": "bag",
        "word2": "beg"
      },
      "id8" : {
        "word1": "hat",
        "word2": "het"
      }
    },
    "ou_oo-hschwa" : {
      "id1" : {
        "word1": "motor",
        "word2": "mortar"
      },
      "id2" : {
        "word1": "load",
        "word2": "lord"
      },
      "id3" : {
        "word1": "bode",
        "word2": "board"
      },
      "id4" : {
        "word1": "coat",
        "word2": "court"
      },
      "id5" : {
        "word1": "boa",
        "word2": "bore"
      },
      "id6" : {
        "word1": "hose",
        "word2": "hoarse"
      },
      "id7" : {
        "word1": "woe",
        "word2": "war"
      }
    },
    "oo-lvc_schwa-u" : {
      "id1" : {
        "word1": "walk",
        "word2": "woke"
      },
      "id2" : {
        "word1": "bought",
        "word2": "boat"
      },
      "id3" : {
        "word1": "cost",
        "word2": "coast"
      },
      "id4" : {
        "word1": "flaw",
        "word2": "flow"
      },
      "id5" : {
        "word1": "hall",
        "word2": "whole"
      },
      "id6" : {
        "word1": "nought",
        "word2": "note"
      }
    },
    "hschwa_lvc" : {
      "id1" : {
        "word1": "fort",
        "word2": "fought"
      },
      "id2" : {
        "word1": "sort",
        "word2": "sought"
      },
      "id3" : {
        "word1": "source",
        "word2": "sauce"
      },
      "id4" : {
        "word1": "lorn",
        "word2": "lawn"
      },
      "id5" : {
        "word1": "there",
        "word2": "their"
      },
      "id6" : {
        "word1": "court",
        "word2": "caught"
      }
    },
    "alfau_oo" : {
      "id1" : {
        "word1": "brown",
        "word2": "brawn"
      },
      "id2" : {
        "word1": "drown",
        "word2": "drawn"
      },
      "id3" : {
        "word1": "down",
        "word2": "dawn"
      },
      "id4" : {
        "word1": "sow",
        "word2": "saw"
      },
      "id5" : {
        "word1": "sough",
        "word2": "saw"
      },
      "id6" : {
        "word1": "tout",
        "word2": "taught"
      }
    },
    "alfa_e" : {
      "id1" : {
        "word1": "not",
        "word2": "net"
      },
      "id2" : {
        "word1": "adopt",
        "word2": "adept"
      },
      "id3" : {
        "word1": "bog",
        "word2": "beg"
      },
      "id4" : {
        "word1": "hot",
        "word2": "het"
      },
      "id5" : {
        "word1": "bock",
        "word2": "beck"
      },
      "id6" : {
        "word1": "bond",
        "word2": "bend"
      }
    },
    "s_esh" : {
      "id1" : {
        "word1": "seat",
        "word2": "sheet"
      },
      "id2" : {
        "word1": "see",
        "word2": "she"
      },
      "id3" : {
        "word1": "seep",
        "word2": "sheep"
      },
      "id4" : {
        "word1": "seer",
        "word2": "sheer"
      },
      "id5" : {
        "word1": "sip",
        "word2": "ship"
      }
    },
    "z_eth" : {
      "id1" : {
        "word1": "wiz",
        "word2": "with"
      },
      "id2" : {
        "word1": "zen",
        "word2": "then"
      },
      "id3" : {
        "word1": "breeze",
        "word2": "breathe"
      },
      "id4" : {
        "word1": "tease",
        "word2": "teethe"
      },
      "id5" : {
        "word1": "closing",
        "word2": "clothing"
      }
    },
    "alfa_a" : {
      "id1" : {
        "word1": "drier",
        "word2": "dryer"
      },
      "id2" : {
        "word1": "find",
        "word2": "fined"
      },
      "id3" : {
        "word1": "guise",
        "word2": "guys"
      },
      "id4" : {
        "word1": "lime",
        "word2": "lyme"
      }
    },
    "e_i" : {
      "id1" : {
        "word1": "wary",
        "word2": "weary"
      },
      "id2" : {
        "word1": "emigrant",
        "word2": "immigrant"
      },
      "id3" : {
        "word1": "desert",
        "word2": "dessert"
      },
      "id4" : {
        "word1": "tear",
        "word2": "tier"
      }
    },
     "schwa-u_oo-hschwa" : {
      "id1" : {
        "word1": "woe",
        "word2": "war"
      },
      "id2" : {
        "word1": "foam",
        "word2": "form"
      },
      "id3" : {
        "word1": "foe",
        "word2": "four"
      }
    },
    "alfa_o" : {
      "id1" : {
        "word1": "dow",
        "word2": "dough"
      },
      "id2" : {
        "word1": "wow",
        "word2": "woe"
      },
      "id3" : {
        "word1": "allow",
        "word2": "alow"
      }
    },
    "alfa_oo" : {
      "id1" : {
        "word1": "noun",
        "word2": "known"
      },
      "id2" : {
        "word1": "farm",
        "word2": "form"
      },
      "id3" : {
        "word1": "what",
        "word2": "wat"
      }
    },
    "oo-hschwa_hschwa-lvc" : {
      "id1" : {
        "word1": "warm",
        "word2": "worm"
      },
      "id2" : {
        "word1": "ward",
        "word2": "word"
      },
      "id3" : {
        "word1": "torn",
        "word2": "turn"
      }
    },
    "other" : {
      "id1" : {
        "word1": "with",
        "word2": "width"
      },
      "id2" : {
        "word1": "breathe",
        "word2": "breadth"
      },
      "id3" : {
        "word1": "father",
        "word2": "further"
      },
      "id4" : {
        "word1": "borrow",
        "word2": "borough"
      },
      "id5" : {
        "word1": "hole",
        "word2": "whole"
      },
      "id6" : {
        "word1": "toe",
        "word2": "tow"
      },
      "id7" : {
        "word1": "bill",
        "word2": "beer"
      },
      "id8" : {
        "word1": "all",
        "word2": "oar"
      },
      "id9" : {
        "word1": "shock",
        "word2": "shook"
      },
      "id10" : {
        "word1": "crock",
        "word2": "crook"
      },
      "id11" : {
        "word1": "aren't",
        "word2": "ant"
      },
      "id12" : {
        "word1": "parse",
        "word2": "pass"
      },
      "id13" : {
        "word1": "some",
        "word2": "sum"
      },
      "id14" : {
        "word1": "discus",
        "word2": "discuss"
      },
      "id15" : {
        "word1": "gall",
        "word2": "girl"
      },
      "id16" : {
        "word1": "walk",
        "word2": "work"
      }
    }
  }
}

À propos des fichiers requis pour utiliser l'application ()

Stocké ci-dessous. https://drive.google.com/open?id=1u4l5wo-6SC00Ys0xBZO_am1v2yPjb_NU

En fait, je pense que la gestion est efficace sur Github sans faire cela. .. Depuis que j'étudie, je l'ai stocké temporairement dans Google Drive.

Téléchargez localement le fichier stocké sur le lecteur ci-dessus et modifiez le répertoire décrit dans .py comme indiqué ci-dessous en fonction de l'emplacement local. (C'est gênant)

Endroit pour mettre Changements de source
Fichier audio (mp3) Répertoire sur le côté droit de la variable "filename"
fichier json Répertoire sur le côté droit de la variable "f"
Fichier image (png) Répertoire sur le côté droit de la variable "pngfile"

À propos du fichier de stockage d'informations sur les mots anglais (JSON)

Comme mentionné ci-dessus, le fichier json organise des paires de mots pour chaque symbole de prononciation différent. Étant donné que les symboles de prononciation ne peuvent pas être traités même s'ils sont écrits tels quels, ils ont été écrits en anglais comme indiqué ci-dessous.

Symbole de prononciation Nom Comment écrire en json ci-dessus
æ Cendre ash
ʃ Esh esh
ə Schwar schwa
ɚ Avec crochet(hooked)Schwar hschwa
ɔ Ouvrir o oo
α alpha alfa
ː Voyelle longue du colon lvc
ʌ Carrett, coin, chapeau crt
ð Eze eth
θ Thêta th

Par exemple, dans le cas d'une paire de "ɚ" et "ː", il est décrit comme "hschwa_lvc".

À propos, a, r, v, etc. sont décrits tels quels.

Remarques

En fait, j'ai créé une application similaire avec C ++ / CLI qui est une extension de C ++ pour .NET, faisant référence au livre suivant au lieu de python.

https://www.amazon.co.jp/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86-Visual-%E5%85%A5%E9%96%80-2015%E5%AF%BE%E5%BF%9C/dp/4822298760

Cependant, j'ai eu du mal devant le langage difficile que la spécification de C ++ / CLR était compliquée et manquait d'informations, et bien que j'aie réussi à faire quelque chose de similaire à ce post, c'est devenu une chose difficile à gérer en raison du manque de maintenabilité. Je l'ai refait avec python et l'ai posté dans cet article.

Informations qui ont servi de référence

J'étais particulièrement reconnaissant envers ce qui suit. Je vous suis très reconnaissant pour toutes les informations utiles.

Contenu Lier la destination
Comment lire des fichiers audio https://qiita.com/kekeho/items/a0b93695d8a8ac6f1028
Comment gérer json https://qiita.com/kikuchiTakuya/items/53990fca06fb9ba1d8a7
Comment accéder de manière aléatoire au type de dictionnaire https://teratail.com/questions/108589
Implémentation du traitement lorsque le pointeur de la souris est placé sur le widget https://tutorialmore.com/questions-716474.htm
Séquence d'événements http://www.rouge.gr.jp/~fuku/tips/python-tkinter/bind.shtml
Changer l'icône de la souris https://suzutaka-programming.com/tkinter-cursor/ https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/cursors.html
Afficher des objets/Cacher https://www.delftstack.com/ja/howto/python-tkinter/how-to-hide-recover-and-delete-tkinter-widgets/
Paramètres du bouton radio https://pg-chain.com/python-radiobutton
À propos de la grille https://python.keicode.com/advanced/tkinter-grid.php
À propos du widget Texte https://www.shido.info/py/tkinter12.html
Jugement des seules lettres https://vatchlog.com/python-alnum/
Gestion des variables globales au sein d'une fonction https://snowtree-injune.com/2018/07/29/post-734/
Nom de chaque symbole de prononciation https://english-columns.weblio.jp/?p=1788 https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E9%9F%B3%E5%A3%B0%E8%A8%98%E5%8F%B7%E3%81%AE%E6%96%87%E5%AD%97%E4%B8%80%E8%A6%A7 https://eigonokai.jp/phonetics/7-%E6%AF%8D%E9%9F%B3%EF%BC%9A%CA%8C%E3%81%AE%E7%99%BA%E9%9F%B3/

finalement

Nous vous serions très reconnaissants si vous pouviez nous faire part de vos suggestions d'amélioration de l'interface graphique et des sources! !!

Recommended Posts

[Python] J'ai créé une application pour pratiquer la délicate distinction vocale des mots anglais.
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai créé une application pour découvrir à qui ressemblent les membres des Pirates du Chapeau de Paille
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
(Python) J'ai créé une application de Trello qui notifie périodiquement le relâchement des tâches sur le point d'expirer.
Avec LINEBot, j'ai fait une application qui m'informe de "l'heure du bus"
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
[Python] J'ai créé une application qui télécharge automatiquement le fichier audio de chaque mot utilisé pour l'application d'étude d'anglais.
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de résumer les opérations de chaîne de Python
Python pratique 100 coups J'ai essayé de visualiser l'arbre de décision du chapitre 5 en utilisant graphviz
J'ai essayé de trouver l'entropie de l'image avec python
J'ai fait une fonction pour vérifier le modèle de DCGAN
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
Je veux connaître la nature de Python et pip
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
Comment connaître la structure interne d'un objet en Python
Je souhaite extraire une URL arbitraire de la chaîne de caractères de la source html avec python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Je veux sortir le début du mois prochain avec Python
J'ai écrit le code pour écrire le code Brainf * ck en python
[Python] Japonais simple ⇒ J'ai essayé de créer un outil de traduction en anglais
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de sortir la liste rpm de la destination de connexion SSH sur une feuille Excel avec Python + openpyxl.
J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
(Python) J'ai essayé d'analyser 1 million de mains ~ J'ai essayé d'estimer le nombre d'AA ~
Je veux colorer une partie de la chaîne Excel avec Python
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
[Lambda] J'ai essayé d'incorporer un module externe de python via S3
Un exemple de réponse à la question de référence de la session d'étude. Avec python.
J'ai fait Othello pour enseigner Python3 aux enfants (4)
J'ai fait Othello pour enseigner Python3 aux enfants (2)
J'ai créé une application d'analyse de fréquence en ligne
Je ne connaissais pas les bases de Python
J'ai fait Othello pour enseigner Python3 aux enfants (5)
Le modèle de projet Python auquel je pense.
Créez une application de mots anglais avec python
J'ai fait Othello pour enseigner Python3 aux enfants (3)
J'ai fait Othello pour enseigner Python3 aux enfants (1)
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
Partie 1 J'ai écrit un exemple de la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
Je suis un amateur le 14e jour de python, mais je veux essayer l'apprentissage automatique avec scicit-learn
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10