[Python] Ich habe eine App erstellt, um die feine Sprachunterscheidung von englischen Wörtern zu üben.

Zusammenfassung

Eine Geschichte, in der eine lokale Person, die ein Kätzchen hält, auf Reisen ins Ausland Englisch sprach.

Ausländer "Wie sagt man" Küche "auf Japanisch?" Ich "(?? Warum hörst du das plötzlich ...) DAIDOKORO" Ausländer "?? ...? Was?" Ich selbst "DAIDOKORO!" Ausländer "... Oh, DAIDOKORO! OK! DAIDOKORO!"

Zu einem späteren Zeitpunkt

Ich sagte: "Es gab so etwas. Ich frage mich, warum ich das gehört habe." Mein Freund "Das war Kätzchen statt Küche, nicht wahr? Du hattest ein Kätzchen, oder? "" Ich sagte: "Oh, Kätzchen! Das ist ein Kätzchen! Ich habe einen Fehler gemacht, weil die Aussprache der Küche ähnlich ist! hahaha "

Mein Freund "..."

Ich "Lass uns Englisch lernen ..."

Was du machen willst

Zeigen Sie zwei Wörter mit ähnlicher Aussprache auf dem Bildschirm an. Spielen Sie eine der Audiodateien nach dem Zufallsprinzip ab. Wählen Sie das Wort aus, das der Benutzer als ausgesprochen bestimmt hat. Zeigen Sie die richtige oder falsche Antwort auf dem Bildschirm an.

Auch verschiedene Wortpaare mit ähnlichen Aussprachesymbolen Sammeln Sie nach Aussprachesymbol und unterscheiden Sie, welches Aussprachesymbol Fordern Sie den Benutzer heraus oder lassen Sie ihn wählen.

Zum Beispiel der Unterschied zwischen 'r'and'l', über den sich viele Menschen, einschließlich mir, Sorgen machen Angenommen, Sie möchten lernen.

Wenn Sie das Spiel starten, zum Beispiel entweder leichte oder rechte Stimme Wird zufällig gespielt und wählen Sie die aus, von der Sie glauben, dass sie gespielt wurde.

Dann wird die richtige oder die falsche Antwort angezeigt.

Übrigens, wie unten gezeigt, sind die Wörter hell und rechts die ersten Sie sind genau gleich, außer dass die phonetischen Symbole l und r sind.

Wort Aussprachesymbol
light lάɪt
right rάɪt

Entwicklungsumgebung

Laden Sie auch die Audiodatei mit englischen Wörtern herunter, die in diesem Tool von weblio verwendet werden. Es ist jedoch sehr mühsam, viele englische Wortdateien einzeln herunterzuladen. Es braucht.

Aus diesem Grund habe ich ein Tool entwickelt, mit dem englische Wörter automatisch durch Web-Scraping heruntergeladen werden können. ↓ https://qiita.com/Fuminori_Souma/private/60ce627e66209763d4f2

Mit diesem Tool können Sie ganz einfach die gewünschte Audiodatei herunterladen. Die Audiodatei des in der JSON-Datei dieses Tools beschriebenen Wortes wird jedoch auf Google Drive veröffentlicht (später beschrieben).

Was ich eigentlich gemacht habe

Der Bildschirm unmittelbar nach der Ausführung sieht folgendermaßen aus. 1.png

Heute werde ich versuchen, zwischen 'und' zu unterscheiden, in denen die Japaner nicht gut sind. 2.png

Wenn Sie auf die Schaltfläche "Spiel starten" klicken, wechselt der Bildschirm zum Spielbildschirm. Gibt es insgesamt 14 Fragen? 3.png

Als ich die Taste "Audio abspielen" drückte, wurde die Audiodatei abgespielt und ich hatte zwei Möglichkeiten. Ich frage mich, welches ausgesprochen wurde. .. Drücken Sie die Taste "Wieder spielen" und hören Sie erneut zu. Okay, die Spannung auf der linken Seite! Klicken Sie auf den "angespannten" Text, um zu antworten. 4.png

Hervorragende Antwort! Du hast es geschafft. Klicken Sie auf "angespannt" und "zehnt", um jeweils zu spielen Lassen Sie uns den Unterschied im Audio überprüfen. Wenn Sie fertig sind, klicken Sie auf die Schaltfläche "Nächstes Problem starten". 5.png

Diesmal "Maus" und "Mund"? Okay, Mund! 6.png

... nicht wahr? verdammt! 7.png

... es ist vorbei. 7 von 14 richtigen Antworten? Nun, es ist in Ordnung (Schweiß) Klicken Sie auf die Schaltfläche "Zurück zum Titel". 8.png

Als nächstes versuchen wir, zwischen 'b'und'v' zu unterscheiden. 1.png

Ich benutze es so.

Quelldatei

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): #Starten Sie das Problem/Spielen Sie erneut Audio ab/Starten Sie das nächste Problem

    if bttn_repnxt['text'] == 'Audio abspielen':

        global word1
        global word2
        global rep_word #Wörter tatsächlich ausgesprochen
        global id

        text_res["text"] = '' #Setzen Sie die Antwort auf die vorherige Frage zurück

        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)  #Audiodatei abspielen

        #Objektstatus ändern
        text_w1["text"] = word1
        text_w2["text"] = word2
        text_ques1["text"] = 'Was wurde ausgesprochen ...'
        text_ques2["text"] = 'Welcher?'
        bttn_repnxt['text'] = 'Nochmal abspielen'
        text_adc.place_forget()

    elif bttn_repnxt['text'] == 'Nochmal abspielen':

        rep_mp3(rep_word)  #Audiodatei abspielen

    else:  # 'Starten Sie das nächste Problem'

        #Objektstatus ändern
        bttn_repnxt['text'] = 'Audio abspielen'
        text_res.place_forget()

        #Starten Sie das nächste Problem (Audiodatei abspielen)
        ques_start_next(event)


def rep_mp3(tgt_word):  #Audio abspielen

    filename = 'C:/Users/fumin/OneDrive/Desktop/English_words/' + tgt_word + '.mp3'  #Die MP3-Datei, die Sie abspielen möchten
    pygame.mixer.init()
    pygame.mixer.music.load(filename)  #Laden Sie die Tonquelle
    mp3_length = mp3(filename).info.length  #Holen Sie sich die Länge der Tonquelle
    pygame.mixer.music.play(1)  #Die Wiedergabe beginnt. Spielen Sie n Mal, wenn Teil 1 geändert wird(In diesem Fall auch xn die Anzahl der Sekunden in der nächsten Zeile.)
    time.sleep(mp3_length + 0.25)  #Warten Sie nach dem Start der Wiedergabe auf die Länge der Tonquelle(0.Warten auf 25 ist Fehlerbehebung)
    pygame.mixer.music.stop()  #Die Wiedergabe stoppt, nachdem auf die Länge der Tonquelle gewartet wurde


def enlarge_word(event):  #Größeres Wort mit Mauszeiger

    if str(event.widget["text"]) == word1:
        text_w1["font"] = ("", 12)   #Größere Zeichen
        text_w1["cursor"] = "hand2"  #Ändern Sie den Mauszeiger in den Zeigefingertyp
    else:
        text_w2["font"] = ("", 12)   #Größere Zeichen
        text_w2["cursor"] = "hand2"  #Ändern Sie den Mauszeiger in den Zeigefingertyp


def undo_word(event):  #Stellt Wörter außerhalb des Mauszeigers auf ihre ursprüngliche Größe wieder her

    if str(event.widget["text"]) == word1:
        text_w1["font"] = ("", 10)  #Zeigen Sie Zeichen in der ersten Größe an
    else:
        text_w2["font"] = ("", 10)  #Zeigen Sie Zeichen in der ersten Größe an


def choose_word(event):  #Stellen Sie fest, ob das vom Benutzer ausgewählte Wort korrekt ist

    global oknum
    global renum

    if bttn_repnxt['text'] == 'Nochmal abspielen':

        #Zeigen Sie die richtigen Antworten und Notizen an
        text_res.place(x=175, y=130)
        text_adc.place(x=130, y=160)

        if str(event.widget["text"]) == word1:  #Wenn Sie das Wort links auswählen

            if rep_word == word1:
                text_res["text"] = 'Richtige Antwort!!'
            else:
                text_res["text"] = 'Falsche Antwort…'

        else:  #Wenn Sie das Wort rechts auswählen

            if rep_word == word2:
                text_res["text"] = 'Richtige Antwort!!'
            else:
                text_res["text"] = 'Falsche Antwort…'

        if text_res["text"] == 'Richtige Antwort!!':

            oknum = oknum + 1  #Fügen Sie die Anzahl der richtigen Antworten hinzu
            text_res["foreground"] = 'blue'
        else:
            text_res["foreground"] = 'red'

        renum -= 1  #Subtrahieren Sie die Anzahl der verbleibenden Fragen

        #Objektstatus ändern
        text_scr['text'] = 'Ergebnis:' + str(oknum) + '/' + str(qunum)
        text_rest['text'] = 'verbleibend:' + str(renum)
        text_ques1["text"] = ''
        text_ques2["text"] = ''
        bttn_repnxt["text"] = 'Starten Sie das nächste Problem'

        if renum == 0:  #Wenn alle Probleme vorbei sind
            bttn_repnxt.place_forget()
            text_end.place(x=110, y=320)

    elif bttn_repnxt['text'] == 'Starten Sie das nächste Problem':  #Spielen Sie Audio für die nächste Ausgabe ab

        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):  #Generieren Sie ein Optionsfeld auf dem Titelbildschirm

    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'):  #Aussprachesymbole auf dem Titelbildschirm(Bild)Generieren Sie a

    if row == 'df' and column == 'df'and pdx == 'df'and num == 'df':  #Für den Titelbildschirm

        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:  #Im Falle des Spielstartbildschirms
        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():  #Wählen Sie ein Aussprachesymbol aus, das Sie studieren möchten

    global rbnum
    global ps

    rbnum = int(var.get())  #Ausgewähltes Optionsfeld(=Aussprachesymbol)Speichern Sie die Nummer von
    ps = list(wordlist['Wordlist'])[rbnum]  #Wählen Sie das ausgewählte Aussprachesymbol aus


def switch_mode(event):  #Starte das Spiel/Kehren Sie zum Titelbildschirm zurück

    global qunum    #Anzahl der Gesamtprobleme
    global oknum    #Anzahl der richtigen Fragen
    global renum    #Anzahl der verbleibenden Probleme
    global quorder  #Reihenfolge der Fragen Fragen

    if bttn_swmode['text'] == 'Spiel starten':

        #Blenden Sie das Objekt aus, das sich auf dem ersten Bildschirm befand
        frame.place_forget()
        text_title.place_forget()
        text_ques3.place_forget()

        #Objekte für das Spiel anzeigen
        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()

        #verschiedene Einstellungen
        oknum = 0
        qunum = len(wordlist['Wordlist'][ps])
        renum = qunum
        text_scr['text'] = 'Ergebnis:' + str(oknum) + '/' + str(qunum)
        text_rest['text'] = 'verbleibend:' + str(renum)
        quorder = random.sample(range(1, qunum + 1), k=qunum)
        bttn_swmode['text'] = 'Zurück zum Titel'
        text_w1["text"] = ''
        text_w2["text"] = ''
        text_ques1["text"] = ''
        text_ques2["text"] = ''
        bttn_repnxt['text'] = 'Audio abspielen'

    else:  #Kehren Sie zum Titelbildschirm zurück

        if renum == 0 or (renum != 0 and messagebox.askyesno('Bestätigung', 'Es gibt immer noch Probleme. Möchten Sie zum Titelbildschirm zurückkehren?')):

            # if messagebox.askyesno('Bestätigung', 'Es gibt immer noch Probleme. Möchten Sie zum Titelbildschirm zurückkehren?'):

            #Verstecke Objekte, die sich auf dem Spielbildschirm befanden
            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()

            #Objekte für den Titelbildschirm anzeigen
            frame.place(x=90, y=90)
            text_title.place(x=110, y=30)
            text_ques3.place(x=90, y=65)
            bttn_swmode['text'] = 'Spiel starten'


#Bildschirmanzeige
root = tkinter.Tk()
root.title(u"Aussprache")
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)

#Beschriftungseinstellungen
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'Wähle ein phonetisches Symbol und starte das Spiel.')
text_ques3.place(x=90, y=65)
text_ps = tkinter.Label(text=u'Aussprachesymbol:')
text_adc = tkinter.Label(text=u'* Klicken Sie auf jedes Wort, um die Stimme abzuspielen')
text_res = tkinter.Label(text=u'')
text_scr = tkinter.Label(text=u'')
text_rest = tkinter.Label(text=u'')
text_title = tkinter.Label(text=u'Aussprache(Temporär)', font=(u'MS morgen früh', 20))
text_title.place(x=110, y=30)
text_end = tkinter.Label(text=u'Das Spiel mit diesem Aussprachesymbol ist beendet.')
text_end["foreground"] = 'green'

#Druckknopfeinstellungen
bttn_repnxt = tkinter.Button(text=u'Audio abspielen', width=11)
bttn_repnxt.bind("<Button-1>", ques_start_next)  # (Button-2 für Radklick, 3 für Rechtsklick)
bttn_swmode = tkinter.Button(text=u'Spiel starten', width=10)
bttn_swmode.bind("<Button-1>", switch_mode)  # (Button-2 für Radklick, 3 für Rechtsklick)
bttn_swmode.place(x=157, y=380)

#Einstellen der Parameter für die Platzierung der Optionsfelder
xinvl = 30
yinvl = 0
var = StringVar()
var.set('0')  #Setzen Sie das Optionsfeld auf "deaktiviert"
f = open("C:/Users/fumin/OneDrive/Desktop/Wordlist.json", 'r')
wordlist = json.load(f)
oknum = 0
rb_clicked()  #Optionsfeld im Ausgangszustand ausgewählt

#Initialisierung von Variablen, die Bildinformationen und Optionsfeldinformationen speichern
pngfile = [''] * len(wordlist['Wordlist'])
cv = [''] * len(wordlist['Wordlist'])
rdbtn = [''] * len(wordlist['Wordlist'])

#Radio knopf/Einstellung des Aussprachesymbols
for i in range(int(len(wordlist['Wordlist'])/2)):

    ipadx = 10

    pngfile[i*2] = PhotoImage(file="C:/Users/fumin/OneDrive/Bild/" + list(wordlist['Wordlist'])[i * 2] + ".PNG")
    pngfile[i*2+1] = PhotoImage(file="C:/Users/fumin/OneDrive/Bild/" + 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()

Englische Wortinformationsspeicherdatei

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"
      }
    }
  }
}

Informationen zu Dateien, die zur Verwendung der App erforderlich sind ()

Unten gespeichert. https://drive.google.com/open?id=1u4l5wo-6SC00Ys0xBZO_am1v2yPjb_NU

Eigentlich denke ich, dass das Management bei Github effizient ist, ohne dies zu tun. .. Da ich studiere, habe ich es vorübergehend in Google Drive gespeichert.

Laden Sie die auf dem obigen Laufwerk gespeicherte Datei lokal herunter und ändern Sie das in .py beschriebene Verzeichnis wie unten gezeigt entsprechend dem lokalen Speicherort. (Es ist mühsam)

Platz zum setzen Quellenänderungen
Audiodatei (mp3) Verzeichnis auf der rechten Seite der Variablen "Dateiname"
JSON-Datei Verzeichnis auf der rechten Seite der Variablen "f"
Bilddatei (png) Verzeichnis auf der rechten Seite der Variablen "pngfile"

Informationen zur englischen Wortinformationsspeicherdatei (json)

Wie oben erwähnt, organisiert die JSON-Datei Wortpaare für jedes unterschiedliche Aussprachesymbol. Da die Aussprachesymbole nicht behandelt werden können, selbst wenn sie so geschrieben sind, wie sie sind, wurden sie wie unten gezeigt in Englisch geschrieben.

Aussprachesymbol Name Wie schreibe ich in json oben
æ Asche ash
ʃ Esh esh
ə Schwar schwa
ɚ Mit Haken(hooked)Schwar hschwa
ɔ Öffnen Sie o oo
α Alpha alfa
ː Langer Vokal Doppelpunkt lvc
ʌ Carrett, Keil, Hut crt
ð Eze eth
θ Theta th

Im Fall eines Paares von "ɚ" und "ː" wird es beispielsweise als "hschwa_lvc" beschrieben.

Übrigens werden a, r, v usw. so beschrieben, wie sie sind.

Bemerkungen

Eigentlich habe ich eine ähnliche App mit C ++ / CLI erstellt, die eine Erweiterung von C ++ für .NET ist und auf das folgende Buch anstelle von Python verweist.

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

Ich kämpfte jedoch vor der schwierigen Sprache, dass die Spezifikation von C ++ / CLR kompliziert war und keine Informationen enthielt, und obwohl ich es schaffte, etwas Ähnliches wie diesen Beitrag zu erstellen, wurde es aufgrund mangelnder Wartbarkeit schwierig, damit umzugehen. Ich habe es mit Python neu gemacht und in diesem Artikel gepostet.

Informationen, die als Referenz verwendet wurden

Besonderer Dank geht an Folgendes. Ich bin Ihnen für alle nützlichen Informationen sehr dankbar.

Inhalt Linkziel
So spielen Sie Audiodateien ab https://qiita.com/kekeho/items/a0b93695d8a8ac6f1028
Wie man mit json umgeht https://qiita.com/kikuchiTakuya/items/53990fca06fb9ba1d8a7
So greifen Sie zufällig auf den Wörterbuchtyp zu https://teratail.com/questions/108589
Implementierung der Verarbeitung, wenn der Mauszeiger auf dem Widget platziert wird https://tutorialmore.com/questions-716474.htm
Ereignisfolge http://www.rouge.gr.jp/~fuku/tips/python-tkinter/bind.shtml
Maussymbol ändern https://suzutaka-programming.com/tkinter-cursor/ https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/cursors.html
Objekte anzeigen/Ausblenden https://www.delftstack.com/ja/howto/python-tkinter/how-to-hide-recover-and-delete-tkinter-widgets/
Optionsfeldeinstellungen https://pg-chain.com/python-radiobutton
Über Gitter https://python.keicode.com/advanced/tkinter-grid.php
Über das Text-Widget https://www.shido.info/py/tkinter12.html
Beurteilung nur von Briefen https://vatchlog.com/python-alnum/
Umgang mit globalen Variablen innerhalb einer Funktion https://snowtree-injune.com/2018/07/29/post-734/
Name jedes Aussprachesymbols 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/

Schließlich

Wir wären Ihnen sehr dankbar, wenn Sie uns Feedback zu Verbesserungsvorschlägen für die GUI und die Quellen geben könnten! !!

Recommended Posts

[Python] Ich habe eine App erstellt, um die feine Sprachunterscheidung von englischen Wörtern zu üben.
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich habe eine App erstellt, um herauszufinden, wie die Mitglieder der Strohhut-Piraten aussehen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
(Python) Ich habe eine App von Trello erstellt, die regelmäßig über das Auslaufen von Aufgaben informiert, die bald ablaufen.
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
[Python] Ich habe eine App erstellt, die automatisch die Audiodatei jedes Wortes herunterlädt, das für die Englisch-Lern-App verwendet wird.
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Python-Übung 100 Schläge Ich habe versucht, den Entscheidungsbaum von Kapitel 5 mit graphviz zu visualisieren
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich möchte die Natur von Python und Pip kennenlernen
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich habe in Python ein Programm erstellt, das die 1-Minuten-Daten von FX auf eine beliebige Zeit (1 Stunde usw.) ändert.
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Wie Sie die interne Struktur eines Objekts in Python kennen
Ich möchte mit Python eine beliebige URL aus der Zeichenfolge der HTML-Quelle extrahieren
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
[Python] Einfaches Japanisch ⇒ Ich habe versucht, ein englisches Übersetzungswerkzeug zu erstellen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, die Liste der Drehzahlen des SSH-Anmeldeziels mit Python + openpyxl in einer Excel-Tabelle auszugeben.
Ich habe ein npm-Paket erstellt, um die ID der IC-Karte mit Raspberry Pi und PaSoRi zu erhalten
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
[Lambda] Ich habe versucht, ein externes Python-Modul über S3 zu integrieren
Ein Beispiel für die Antwort auf die Referenzfrage der Studiensitzung. Mit Python.
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (4)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (2)
Ich habe eine Online-Frequenzanalyse-App erstellt
Ich kannte die Grundlagen von Python nicht
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (5)
Die Python-Projektvorlage, an die ich denke.
Erstellen Sie eine englische Wort-App mit Python
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (3)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (1)
Ich habe ein Skript erstellt, um zu überprüfen, ob an der angegebenen Position der JSON-Datei in Python Englisch eingegeben wird.
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Ich bin ein Amateur am 14. Tag von Python, aber ich möchte maschinelles Lernen mit Scicit-Learn ausprobieren
Ich habe ein Tool erstellt, um die Ausführungszeit von cron zu schätzen (+ PyPI-Debüt)
[Python] Ich habe versucht, das Mitgliederbild der Idolgruppe mithilfe von Keras zu beurteilen
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden