[GO] [Automatische Übersetzung] Tool zur Unterstützung der englischen Eingabe Translation-chan [Python]

Englisch ist schwach, also Englisch ...

Hallo. Es ist wunderbar zu sagen, dass ich Englisch gelernt habe, weil mein Englisch schwach ist. In meinem Fall: "Ich bin schwach in Englisch, also habe ich mir überlegt, wie ich dem Englischen entkommen kann." Deshalb habe ich es geschafft. (Abrupt) ** Für diejenigen, die "den Quellcode schnell kopieren und einfügen möchten" oder nach einer technischen Story suchen Es ist Zeit für eine technische Story % 81% 9D% E3% 82% 8D% E3% 81% 9D% E3% 82% 8D% E6% 8A% 80% E8% A1% 93% E7% 9A% 84% E3% 81% AA% E8% A9 Bitte gehen Sie zu% B1)! ** ** ** ** Wenn Sie es eilig haben, können Sie win10 (64 Bit) unter Anhang: Einfaches Installationsprogramm (.bat) verwenden E9% 8C% B2win10-64bit% E7% 94% A8% E7% B0% A1% E6% 98% 93% E3% 82% A4% E3% 83% B3% E3% 82% B9% E3% 83% 88% Wenn Sie E3% 83% BC% E3% 83% A9) verwenden, können Sie es in ca. 10 Minuten installieren. ** ** **

Voraussetzung ist, dass Python 3.X installiert ist. Weitere Informationen finden Sie unter Herunterladen und Installieren von Python 3.7.3 - Programmieren starten. Bitte versuchen Sie es vorzustellen. Natürlich muss es nicht 3.7.3 sein. Es muss nicht die neueste Version sein.

Erster Hintergrund

Ich kommuniziere mit Geschäftspartnern in Übersee auf Englisch. Mit anderen Worten, es gibt relativ viele Möglichkeiten, auf Englisch zu kommunizieren, nicht nur per E-Mail. Was passiert jedoch, wenn Sie einen Mann, der kein Englisch spricht, bitten, auf Englisch zu kommunizieren? Ja, Sie müssen sich auf die Google-Übersetzung verlassen. Sie werden in der Lage sein, so etwas zu tun.

1.Denken Sie an den Inhalt auf Japanisch
2.Zu Google Translate werfen
3.Englisch lernen
4.Übersetzen Sie den englischen Text, den Sie bei Google erhalten haben, erneut
5.Untersuchung der erneut übersetzten Japaner
→ Wenn zwischen dem Originaltext und der Bedeutung eine Diskrepanz besteht, kehren Sie zu 1 zurück und überarbeiten Sie den Text nach Bedarf.

** Ist das nicht unmöglich? ?? ** ** ** Es ist wirklich nervig. Nein, ich spreche davon, Englisch sprechen zu können. Wenn Sie nicht gut Englisch können, haben Sie keine andere Wahl, als diese Arbeit zu erledigen. Gilt das nicht besonders für Menschen in den Vierzigern und Fünfzigern, die plötzlich Englisch sprechen müssen?

Vielleicht, weil es Zeit braucht, sollen die Überstunden der Abteilung doerai sein, also habe ich es geschafft.

Als nächstes werde ich Kas vorstellen,

Wenn Sie diese Übersetzung mit der in die Zwischenablage kopierten japanischen Eingabe beginnen, wird sie durch "." In Sätze unterteilt. ~~ Am Ende des Satzes und übersetzt. ** 8/3 aktualisiert: Trennzeichen in Zeilenumbruch geändert. ** Wenn die Übersetzung abgeschlossen ist, können Sie die Taste drücken und das übersetzte Englisch in die Zwischenablage kopieren. Unten finden Sie einen Screenshot der Anweisungen und Testvoreinstellungen beim ersten Start. カス

** Es sieht völlig abgenutzt aus. ** Besonders die unteren drei Tasten sind schrecklich. Ich konnte so etwas nur machen, weil ich nicht genug technische Fähigkeiten hatte. Ich habe die GUI zum ersten Mal mit wxpython entworfen, also Bitte verzeih mir Sai,

Es geht um technische Gespräche

Vielen Dank, dass Sie bisher bei uns geblieben sind. Im Folgenden wird der Code zur Einführung vorgestellt, während die Umgebung angezeigt wird.

Voraussetzung Umgebung

win10 64bit ** python3.8.4 ** Angenommen, der Python-Pfad ist vorhanden Nur das. Wenn Sie die 32-Bit-Version von win10 verwenden, lesen Sie diese bitte gut durch und fahren Sie mit der Einführung fort.

Installieren Sie in dieser Umgebung einen Browser namens Chromium und installieren Sie ein Paket, um damit umzugehen.

Installation der erforderlichen Pakete für Python

Starten Sie die Eingabeaufforderung und drücken Sie den folgenden Befehl.

pip install chromedriver_binary==84.0.4147.30.0
pip install wxpython
pip install pyperclip
pip install selenium
pip install beautifulsoup4

Ich denke, es wird unerwartet bald enden.

Chrom-Installation

Offizielle Website für Chromium für Win10 64bit DL aus Medien) und dekomprimieren. Wahrscheinlich wird ein Ordner namens "chrome-win" erstellt. Verschieben Sie ihn also direkt unter "C: \ Programme". Wenn Sie es verschieben können, ist Chromium bereit. Wenn Sie nicht Win10 64bit sind und aus dem offiziellen Repository herunterladen möchten, stellen Sie bitte sicher, dass die Chromium-Version "84.0.4147.0" ist. Genau genommen sollte die Hauptversion 84 sein, aber ich habe die Operation nicht bestätigt, also ...

Was ist Chrom?

Es ist ein Open-Source-Webbrowser und die Basis von Google Chrome, wie Sie anhand des folgenden Symbols sehen können. Außerdem werden Opera und Microsoft Edge ab Juli 2020 auf Chromium-Basis entwickelt. chromium_logo

-Wikipwdia Der Name des Chrom-Projekts leitet sich vom Metallelement Chrom (Chrom in Englisch) ab, das bekanntermaßen zum Beschichten von Eisen und dergleichen verwendet wird. Da das verchromte Metall auf Englisch Chrom genannt wird, kam es zu diesem Namen im Sinne von "Dinge, die zur Herstellung von (Google) Chrome verwendet wurden".

Im Bereich des täglichen Gebrauchs fühlt es sich jedoch fast wie Google Chrome an, und Sie können Chromium verwenden, ohne tief darüber nachzudenken (zumindest für mich).

Vorteile der Verwendung von Chrom

Die folgenden drei Punkte dienen dazu, Chromium als kontrollierten Browser anstelle von Google Chrome auszuwählen.

  1. Google Chrome verfügt über automatische Updates
  2. Es gibt nur wenige Leute, die es hauptsächlich bedienen
  3. Trotzdem kann es mit der gleichen Benutzerfreundlichkeit wie Google Chrome betrieben werden

Erstens sind in Bezug auf 1 nicht nur Browser, sondern auch Apps ohne automatische Updates unpraktisch, da sie verschiedene Einschränkungen aufweisen, einschließlich Sicherheitsproblemen. In dieser Anwendung ist es jedoch ziemlich vorteilhaft, weil es notwendig ist, "die Hauptversion des Treibers und der Anwendung abzugleichen". Außerdem wird es diesmal im Headless-Modus gestartet. In diesem Fall erkennt der Benutzer es jedoch eher als "nur eine Hintergrund-App", sodass Chromium nicht absichtlich eine Verbindung zum Web herstellt. Mit anderen Worten, es gibt fast keine Bedenken hinsichtlich der Sicherheit (natürlich ist es nicht Null).

In Bezug auf 2 sollte dieser Übersetzungs-Chan ursprünglich innerhalb der Abteilung bereitgestellt werden, daher bestand die Möglichkeit, dass "Unannehmlichkeiten auftreten würden, wenn der normalerweise verwendete Browser gesteuert wird". Ich bin nicht sehr gut in Browsern, deshalb wollte ich IE, MS Edge, Google Chrome, FireFox, Opera und Sleipnir für alle Fälle vermeiden.

In Bezug auf ** 3 ist dies ehrlich gesagt der größte Entwickler. ** Da es mit demselben Treiber wie Google Chrome funktioniert, war es einfach, es mit Google Chrome zu entwickeln und mit Chromium → Test in einer Situation nahe der Produktionsumgebung zu implementieren. Es geht hoch.

Deshalb war Chrom so praktisch.

Übersetzungs-Chan

Es ist schließlich der Quellcode des Hauptteils. Übersetzen Sie das oben installierte Chrom mit der Kontrolle von Selen.

import wx
import wx.lib.scrolledpanel
import pyperclip
import time
import urllib.parse
import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
from time import sleep


class Translator:       #Klasse, die die Übersetzung durch Selen definiert
    def __init__(self):
        self.options = Options()
        self.options.binary_location =  "C:\\Program Files\\chrome-win\\chrome.exe"
        self.options.add_argument("--headless")          #Starten Sie im Headless-Modus
        self.browser = webdriver.Chrome(options=self.options)
        #self.browser.minimize_window()                   #Wenn der Proxy aktiviert ist, minimieren Sie ihn.
        self.browser.implicitly_wait(2)

    def trans(self, txt , lg1 , lg2):      #Funktion zum Übersetzen von lg1 nach lg2
        if txt == "":                      #Gibt leer zurück, wenn die Eingabe leer ist
            return txt
        #Zugriff nach dem Einbetten des Satzes, den Sie übersetzen möchten, in die URL
        text_for_url = urllib.parse.quote_plus(txt, safe='')
        url = "https://translate.google.co.jp/#{1}/{2}/{0}".format(text_for_url , lg1 , lg2)
        self.browser.get(url)

        #warten Sie ein wenig
        wait_time = len(txt) / 1000
        if wait_time < 0.5:
            wait_time = 0.5
        time.sleep(wait_time)

        #Übersetzungsergebnisse extrahieren
        soup = BeautifulSoup(self.browser.page_source, "html.parser")
        ret =  soup.find(class_="tlid-translation translation")

        return ret.text    

    def quit(self):
        self.browser.quit()


def main():
    #Holen Sie sich den Inhalt der Zwischenablage
    orig = str(pyperclip.paste())

    #Erkennt Brüche und Risse. Zu diesem Zeitpunkt Zeilenumbruchinformationen"\r\n"Wird verloren sein
    orignal_elements = orig.splitlines()
    print(orignal_elements)

    #Variable, die Zeichenfolgen im Zusammenhang mit der Übersetzung speichert
    origs = []
    en_txt = []
    jp_txt = []

    #Globale Variable, um eine leere Zeile zu erhalten
    global blank_row
    blank_row = []
    count = 0
    while count < len(orignal_elements):
        buf = orignal_elements[count]           #"   "Beseitigen Sie nur leere Elemente wie
        buf = buf.replace(" " , "")             #Da es nicht möglich ist, einer Fremdsprache einfach durch Löschen des Leerzeichens zu entsprechen, nehmen Sie den Unterschied
        if buf != "":                           #Wenn es nicht leer ist, fügen Sie es dem Übersetzungsziel hinzu
            origs.append(orignal_elements[count])
        else:
            blank_row.append(count)             #Wenn es leer ist, war es ursprünglich eine leere Zeile, also ermitteln Sie die Position des Elements mit int
        count += 1
    
    #Stellen Sie 2 zu übersetzende Sprachen ein[Heimatsprache,Fremdsprache]Wir planen, es so zu erstellen, dass die Sprache in Zukunft aus dem Pulldown-Menü ausgewählt werden kann.
    global lg
    lg = ["ja" , "en"]

    #Stellen Sie zwei Sprachen für die umgekehrte Übersetzung ein[Fremdsprache,japanisch]
    global rev_lg
    rev_lg = list(reversed(lg))

    #GUI-Vorbereitung
    app = wx.App()

    #Anzeige während des Ladens
    read_frame = wx.Frame(None, wx.ID_ANY, "In der Übersetzung...", size=(250,0))
    read_frame.Centre() #Wird in der Mitte angezeigt
    read_frame.Show()

    global rows
    rows = len(origs)           #Beachten Sie die Anzahl der Zeilen, da len 0 enthält

    for row in range(rows):     #Übersetzen Sie zuerst basierend auf dem Originaltext
        #Original
        txt = origs[row]
        #print("Original:",txt)

        #Englisch
        en_txt.append(translator.trans(origs[row], *lg))
        #print("Englisch:",en_txt)

        #Neuübersetzung
        jp_txt.append(translator.trans(en_txt[row], *rev_lg))

    size = (900,600)
    global frame
    frame = wx.Frame(None, wx.ID_ANY, 'Übersetzungs-Chan', size=size)
    panel = wx.lib.scrolledpanel.ScrolledPanel(frame,-1, size=size, pos=(0,28), style=wx.SIMPLE_BORDER)
    panel.SetupScrolling()
    panel.SetBackgroundColour('#AFAFAF')

    global text
    global en_text
    global jp_text
    global btn
    layout = wx.FlexGridSizer(rows+1,4,0,0)

    text = [""]*rows            #Vorbereiten des Originaltext-Widgets
    en_text = [""]*rows         #Vorbereiten des englischen Text-Widgets
    jp_text = [""]*rows         #Vorbereitung des Text-Widgets zur erneuten Übersetzung
    btn = [""]*rows             #Vorbereiten des Widgets für die Übersetzungsschaltfläche

    cellsize = (270,90)
    for row in range(rows):
        #Original
        txt = origs[row]
        text[row] = wx.TextCtrl(panel, row , txt, style = wx.TE_MULTILINE,size=cellsize)
        #print("Original:",txt)

        #Englisch
        en_text[row] = wx.TextCtrl(panel, row , en_txt[row], style = wx.TE_MULTILINE,size=cellsize)
        en_text[row].Disable()      #Schreibgeschützt
        #print("Englisch:",en_txt)

        #Neuübersetzung
        jp_text[row] = wx.TextCtrl(panel, row , jp_txt[row], style = wx.TE_MULTILINE,size=cellsize)
        jp_text[row].Disable()      #Schreibgeschützt
        #print("Neuübersetzung:",jp_txt)

        #Schaltfläche "Übersetzen"
        btn[row] = wx.Button(panel, row, "Übersetzung", size=(60, 40))
        btn[row].Bind(wx.EVT_BUTTON, OnClickBtn)            #Schaltfläche an Ereignis binden


        #Anordnung von Widgets
        #layout.Add(text[row], flag=wx.ALIGN_LEFT | wx.GROW)         #Original
        layout.Add(text[row], flag=wx.SHAPED)         #Original
        layout.Add(jp_text[row], flag=wx.SHAPED)      #Neuübersetzung
        layout.Add(en_text[row], flag=wx.SHAPED)      #Englisch
        layout.Add(btn[row],flag=wx.SHAPED | 
            wx.ALIGN_CENTER_VERTICAL | wx.TE_MULTILINE)             #Schaltfläche "Übersetzen"
    
    copy_btn = wx.Button(panel, wx.ID_ANY, "Übersetzung abgeschlossen", size=(80, 40))
    copy_btn.Bind(wx.EVT_BUTTON, OnClickCopyBtn)
    layout.Add(copy_btn,flag=wx.SHAPED | 
        wx.ALIGN_CENTER_VERTICAL | wx.TE_MULTILINE)

    retrans_btn = wx.Button(panel, wx.ID_ANY, "Setzen Sie jede Zelle zurück und übersetzen Sie sie erneut", size=(200, 40))
    retrans_btn.Bind(wx.EVT_BUTTON, OnClickRetransBtn)
    layout.Add(retrans_btn,flag=wx.SHAPED | 
        wx.ALIGN_CENTER_VERTICAL | wx.TE_MULTILINE)
    
    exit_btn = wx.Button(panel, wx.ID_ANY, "Beenden Sie die Übersetzung", size=(120, 40))
    exit_btn.Bind(wx.EVT_BUTTON, OnClickExitBtn)
    layout.Add(exit_btn,flag=wx.SHAPED | 
        wx.ALIGN_CENTER_VERTICAL | wx.TE_MULTILINE)

    #Platzierung der Tasten
    layout.AddGrowableCol(0, 3)
    layout.AddGrowableCol(1, 3)
    layout.AddGrowableCol(2, 3)
    layout.AddGrowableCol(3, 1)

    #Layout-Update
    panel.SetSizer(layout)

    #Statusleiste definieren
    frame.CreateStatusBar()
    frame.SetStatusText("Bitte beachten Sie die Vertraulichkeitsverpflichtung, bevor Sie den Onlinedienst nutzen.")
    
    read_frame.Close()
    frame.Centre() #Wird in der Mitte angezeigt
    frame.Show()
    app.MainLoop()


def OnClickBtn(event):
    num = event.GetId()

    btn[num].Disable()
    
    n_txt = text[num].GetValue()
    n_en_txt = translator.trans(n_txt, *lg)
    n_jp_txt = translator.trans(n_en_txt, *rev_lg)
    
    en_text[num].SetValue(n_en_txt)
    jp_text[num].SetValue(n_jp_txt)

    btn[num].Enable()

def copy_all():         #Eine Funktion, die den englischen Text des Übersetzungsergebnisses in die Zwischenablage kopiert

    fin_txt = ""        #Zeichenfolge zum Kopieren in die Zwischenablage
    fin_txts = []       #Eine Zeichenfolge, in der der übersetzte englische Text für jede Zelle gespeichert wird

    for row in range(rows):
        fin_txts.append(en_text[row].GetValue()+"\r\n")     #Stellen Sie verlorene Zeilenumbruchinformationen mit der Splitlines-Methode wieder her

    for blank in blank_row:
        fin_txts.insert(blank,"\r\n")                       #Die Position der leeren Zeile ist leer_Fügen Sie eine leere Zeile hinzu, da sie in einer Zeile gespeichert ist

    for element in fin_txts:
        fin_txt += element                                  #Da die Zeilenvorschubinformationen wiederhergestellt wurden, werden sie als Ausgabezeichenfolge kombiniert.

    return fin_txt

def OnClickCopyBtn(event):          #Wenn die Taste [Übersetzung abgeschlossen] gedrückt wird
    pyperclip.copy(copy_all())

def OnClickRetransBtn(event):       #Wenn die Taste [Jede Zelle zurücksetzen und erneut übersetzen] gedrückt wird
    frame.Close()
    main()

def OnClickExitBtn(event):          #Wenn die Taste [Übersetzung beenden] gedrückt wird
    pyperclip.copy(copy_all())
    frame.Close()
    translator.quit()


if __name__ == "__main__":
    translator=Translator()
main()

Speichern Sie dies als Python-Skriptdatei (.py) mit einem geeigneten Namen. Klicken Sie mit der rechten Maustaste und führen Sie dies aus, um Translation-chan zu starten. Beginnen Sie mit einer Kopie des entsprechenden Japaners in der Zwischenablage.

In Bezug auf Selen [Python] Selenium-Verwendungsprotokoll (@ motoki1990) Alle automatischen Operationen von Chrome mit Python + Selen (@ mekakura),

In Bezug auf die Verwendung von wxpthon Versuchen Sie es mit wxPython (@ Kenta-Han),

In Bezug auf die automatische Übersetzung Automatisierung der Google-Übersetzung mit Selen - Haruko Ameyomi,

Ich bezog mich auf jeden. Ich habe es in Kombination angeordnet, aber da es sich um einen Code handelt, der durch Eilarbeit erstellt wurde, finde ich, dass er auf verschiedene Weise strukturell seltsam ist. Besonders die Struktur um die Hauptfunktion ist verdächtig. Ist es nicht verdächtig? Ursprünglich wurde es hauptsächlich im Klartext erstellt, daher gibt es einen Teil, der in Eile globalisiert wurde, damit er funktioniert. Das Seltsame hier ist, dass ich noch Anfänger bin und auf einen Professor von einem Experten warte.

Auch für die wundervolle Person, die diese Übersetzung stark nutzt, werde ich Ihnen sagen, dass es möglich ist, sie mit einem Hotkey (Tastenkürzel) zu starten. Bitte versuchen Sie es hier zu erstellen. Sie müssen diesbezüglich nichts Neues installieren. Erstellen Sie eine Verknüpfung für das Python-Programm (Windows 10)-@ Odanny

In zukünftigen Updates planen wir, nicht nur Englisch, sondern auch andere Sprachen zu unterstützen. Daher werden wir mit dem Lernen fortfahren, damit es mit einer Funktion behandelt werden kann.

Anhang: Einfaches Installationsprogramm für win10 64bit

Abschließend möchte ich ein einfaches Installationsprogramm vorstellen. ** Stellen Sie sicher, dass Sie mit Administratorrechten ausführen **


@echo off
Überprüfen Sie die Rem-Zeichencodierung
chcp 65001
setlocal

start https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Win_x64%%2F768952%%2Fchrome-win.zip?generation=1589490546798193^&alt=media
Wenn Echo DL abgeschlossen ist[Enter]drücken Sie die Taste&& pause
Powershell -command "Expand-Archive -Path $env:USERPROFILE\Downloads\Win_x64_768952_chrome-win.zip -DestinationPath C:\Program` Files"
del %USERPROFILE%\Downloads\Win_x64_768952_chrome-win.zip

py -m pip install chromedriver_binary==84.0.4147.30.0
py -m pip install wxpython
py -m pip install pyperclip
py -m pip install selenium
py -m pip install beautifulsoup4

endlocal
exit

Alles ist in Ordnung, speichern Sie es als Batch-Datei (.bat) und führen Sie es mit ** Administratorrechten aus. ** ** **

Ausblick von Translation-Chan

Diese Übersetzung hat viele Funktionsmängel. Derzeit planen wir die Implementierung der folgenden Funktionen.

  1. GUI / UX-Raffinesse 1-1. Größenänderungsfunktion jeder Zelle 1-2. Zellenschaltfläche hinzufügen 1-3. Nacheinander aus übersetzten Zellen anzeigen
  2. Wählen Sie mit dem Kombinationsfeld eine Sprache aus ~~ 3. Setzen Sie das Trennzeichen auf [. ] Zu [. (Zeitraum voller Breite)] [? ] Usw. ~~ → 29.07.: Verbessert, um die Aufbewahrung von Zeilenvorschubinformationen zu unterstützen.
  3. Wordbook mit Wörterbuchfunktion (entspricht Branchenbegriffen und internen Begriffen) Beispiel: Vertraulich
  4. Resident-Modus
  5. Wortkonvertierungsfunktion

Referenzenliste

Dies ist ein sehr hilfreicher Artikel, den ich schon oft besucht habe. Wir möchten diese Gelegenheit nutzen, um Ihnen zu danken. Wenn es ein Problem mit diesem Artikel gibt, werden wir es sofort löschen.

[Python] Selenium-Verwendungsprotokoll-@ motoki1990 ・ Alle automatischen Vorgänge von Chrome mit Python + Selen-@ mekakura ・ Versuchen Sie es mit wxPython-@ Kenta-Han ・ Automatisierung der Google-Übersetzung mit Selen - Haruko Ameyomi

Es ist in Ordnung, wenn Sie es kopieren, also hoffe ich, dass sich verschiedene Leute für Python interessieren.

Informationen aktualisieren

7/29 Quellcode aktualisieren ・ Beschleunigung des Betriebs ・ Unterstützt die Aufbewahrung von Zeilenvorschubinformationen → Ändern Sie das Trennzeichen entsprechend (Interpunktion → Zeilenumbruch) Es wurde im Quellcode wiedergegeben. Da ich die Spezifikationen geändert habe, habe ich das Bild von Translate-chan (ein Bild wie ein Bodensatz) aktualisiert.

Recommended Posts

[Automatische Übersetzung] Tool zur Unterstützung der englischen Eingabe Translation-chan [Python]
[Python] Einfaches Japanisch ⇒ Ich habe versucht, ein englisches Übersetzungswerkzeug zu erstellen
Englisch Wort Rechtschreibprüfung Tool (von Python gemacht)
[Python] Standardeingabe