[PYTHON] Führen Sie die Google-Übersetzung und die DeepL-Übersetzung mit der GUI aus

Einführung

Heutzutage kann ich die maschinelle Übersetzung nicht loslassen, um englische Literatur zu lesen. In diesem Fall möchte ich insbesondere ein Tool, das englische PDF-Dateien automatisch per Knopfdruck übersetzt. PDF enthält jedoch zusätzlich zum Text eine Mischung aus Fußnoten und Seitenzahlen, sodass es schwierig ist, nur die erforderlichen Textdaten zu extrahieren. Ich habe ein Tool ** Text_translator ** erstellt, das Textdaten manuell kopiert und interaktiv die nachfolgende Verarbeitung in der GUI durchführt.

Zu verwendendes Modul

--GUI wird mit tkinter erstellt

Code

text_translator.py


# -*- coding: utf-8 -*-

import tkinter as tk
import tkinter.scrolledtext as S
from tkinter import messagebox as tkMessageBox
from tkinter import filedialog as tkFileDialog
from googletransx import Translator
from docx import Document
import os
import datetime
import requests

#Was passiert, wenn auf Schaltfläche 1 geklickt wird?
def ButtonClick1():
    lines = input_box.get('1.0', 'end -1c')      #Holen Sie sich die Zeichenfolge in das Eingabefeld eingegeben

    #"" Vor dem Zeilenumbruch.」、「."」、「.Ersetzen Sie "" und ":" durch Dummy-Zeichen
    words = [".\n",".\"\n",".”\n",":\n"]

    for i, word in enumerate(words):
        lines = lines.replace(word,"XXX" + str(i))
        
    lines = lines.replace("-\n", "")            #"" Vor dem Zeilenumbruch-Gelöscht
    lines = lines.replace("\n", " ")            #Zeilenvorschub-Symbol entfernen

    #Machen Sie die Dummy-Zeichen rückgängig und fügen Sie weitere Leerzeilen hinzu
    for i, word in enumerate(words):
        lines = lines.replace("XXX" + str(i), word + "\n")

    lines = lines.encode('utf-8', "ignore").decode('utf-8')	#Löschen Sie Zeichen, die Python nicht verarbeiten kann.

    processed_box.delete('1.0', 'end')              #Löschen Sie die Formungsergebnisspalte
    processed_box.insert('1.0', lines)              #Geben Sie das Formatierungsergebnis in der Spalte Formatierungsergebnis aus

#Was passiert, wenn auf Schaltfläche 2 geklickt wird?
def ButtonClick2():
    lines = get_text()

    while True:
        if len(lines) >= 5000:                  #Wenn die Anzahl der übersetzten Zeichen 5000 oder mehr beträgt
            lines1 = lines[:5000].rsplit('\n\n', 1)[0]                  #Absätze mit bis zu 5000 Zeichen
            lines2 = lines[:5000].rsplit('\n\n', 1)[1] + lines[5000:]   #Verbleibender Absatz
    
            translator = Translator()
            lines1 = translator.translate(lines1, dest='ja').text       #Google Übersetzung
            translate_box.insert('end', lines1 + '\n\n')                #Wird in der Spalte mit den Übersetzungsergebnissen angezeigt
    
            lines = lines2                      #Stellen Sie den Rest des Absatzes ein
        
        else:                                   #Wenn die Anzahl der übersetzten Zeichen weniger als 5000 beträgt
            translator = Translator()
            lines = translator.translate(lines, dest='ja').text         #Google Übersetzung
            translate_box.insert('end', lines)                          #Wird in der Spalte mit den Übersetzungsergebnissen angezeigt

            break

#Was passiert, wenn auf Schaltfläche 3 geklickt wird?
def ButtonClick3():
    lines = get_text()

	#Bitte geben Sie hier den von Ihnen ausgestellten SCHLÜSSEL ein
    DEEPL_API_KEY = 'XXXXX'

	#Erstellen Sie ein Wörterbuch mit Parametern, die in die URL-Abfrage aufgenommen werden sollen
    params = {
	            "auth_key": DEEPL_API_KEY,
	            "text": lines,
	            "target_lang": 'JA'  #Stellen Sie die Ausgabetextsprache auf Englisch ein
	        }

	#POST mit Parametern
    request = requests.post("https://api.deepl.com/v2/translate", data=params)

    result = request.json()
    lines = result["translations"][0]["text"]

    translate_box.insert('end', lines)                          #Wird in der Spalte mit den Übersetzungsergebnissen angezeigt

#Was passiert, wenn auf Schaltfläche 4 geklickt wird?
def ButtonClick4():
    edit_text = processed_box.get('1.0', 'end -1c')                         #Rufen Sie die im Formatierungsergebnisfeld eingegebene Zeichenfolge ab

    translate_text = translate_box.get('1.0', 'end -1c')                #Rufen Sie die im Übersetzungsergebnisfeld eingegebene Zeichenfolge ab

    fTyp=[('Word-Datei',"*.docx")]                                        #Wählen Sie Word Bilingual Template
    iDir='.'
    filename=tkFileDialog.askopenfilename(filetypes=fTyp,initialdir=iDir)
    document = Document(filename)

    for paragraph in document.paragraphs:
        paragraph.text = paragraph.text.replace("Der Originaltext ist hier angegeben.",edit_text)        #Geben Sie den Originaltext in die Word-Übersetzungstabelle ein
        paragraph.text = paragraph.text.replace("Die Übersetzung finden Sie hier.",translate_text)   #Nehmen Sie die Übersetzung in die Word-Übersetzungstabelle auf

    paragraphs = (paragraph
                  for table in document.tables
                  for row in table.rows
                  for cell in row.cells
                  for paragraph in cell.paragraphs)
    
    for paragraph in paragraphs:
        paragraph.text = paragraph.text.replace("Der Originaltext ist hier angegeben.",edit_text)        #Geben Sie den Originaltext in die Word-Übersetzungstabelle ein
        paragraph.text = paragraph.text.replace("Die Übersetzung finden Sie hier.",translate_text)   #Nehmen Sie die Übersetzung in die Word-Übersetzungstabelle auf

    dt_now = datetime.datetime.now()                                    #Word-Vergleichstabelle speichern
    dt_str = str(dt_now.hour).zfill(2)+str(dt_now.minute).zfill(2)+str(dt_now.second).zfill(2)
    savefilename = filename.replace(u".docx","_replace" + dt_str + ".docx")
    document.save(savefilename)

    tkMessageBox.showinfo("Erstellung abgeschlossen",os.path.basename(savefilename) + "Ich habe es gespeichert.")   #Ergebnis speichern anzeigen

def get_text():
    lines = processed_box.get('1.0', 'end -1c')     #Rufen Sie die im Formatierungsergebnisfeld eingegebene Zeichenfolge ab

    #Holen Sie sich die Anzahl der Zeichen und zeigen Sie es auf dem Bildschirm an
    label = tk.Label(root, text = "Wortzahl"  + str(len(lines)) + "   ", font = ("Helvetica",14))
    label.place(relx = 0.58, y = 20)

    translate_box.delete('1.0', 'end')          #Löschen Sie die Spalte mit den Übersetzungsergebnissen

    return lines
    
#Hauptprogramm
root = tk.Tk()
root.geometry("1600x800")
root.title("Text_translator")

#Beschriftungseinstellungen
label1 = tk.Label(root, text = "Text eingeben", font = ("Helvetica",14))
label1.place(x = 20, y = 20)
label2 = tk.Label(root, text = "Formatierungsergebnis", font = ("Helvetica",14))
label2.place(relx = 0.34, y = 20)
label3 = tk.Label(root, text = "Übersetzungsergebnis", font = ("Helvetica",14))
label3.place(relx = 0.67, y = 20)

#Tasteneinstellungen
button1 = tk.Button(root, text = "Gestaltung", font = ("Helvetica",14), command = ButtonClick1)
button1.place(x = 200, y = 15)
button2 = tk.Button(root, text = "Google Übersetzung", font = ("Helvetica",14), command = ButtonClick2)
button2.place(relx = 0.42, y = 15)
button3 = tk.Button(root, text = "DeepL Übersetzung", font = ("Helvetica",14), command = ButtonClick3)
button3.place(relx = 0.50, y = 15)
button4 = tk.Button(root, text = "Erstellung von Wortübersetzungstabellen", font = ("Helvetica",14), command = ButtonClick4)
button4.place(relx = 0.75, y = 15)

#Eingabefeldeinstellungen
input_box = S.ScrolledText(root, font = ("Helvetica",12))
input_box.place(relheight = 0.89, relwidth = 0.32, relx = 0.01, y = 60)

#Formatieren der Ergebnisfeldeinstellungen
processed_box = S.ScrolledText(root, font = ("Helvetica",12))
processed_box.place(relheight = 0.89, relwidth = 0.32, relx = 0.34, y = 60)

#Übersetzungsbox-Einstellungen
translate_box = S.ScrolledText(root, font = ("Helvetica",12))
translate_box.place(relheight = 0.89, relwidth = 0.32, relx = 0.67, y = 60)

root.mainloop()

Bildschirmbild und Verwendung

画面イメージ.png

Ende

Viele Leute haben Google-Tools zur Automatisierung von Übersetzungen erstellt, aber ich sehe nicht viele Tools, die eine grafische Benutzeroberfläche verwenden. Die GUI ist leicht zu verstehen. ** Wenn es Ihnen gefällt, bitte LGTM. ** ** **

Recommended Posts

Führen Sie die Google-Übersetzung und die DeepL-Übersetzung mit der GUI aus
Übersetzen - Hilfe von PHP_UML mit Google Übersetzung
Übersetzen Sie DeepL automatisch mit Python und Selen ins Englische
[GUI in Python] PyQt5-Drag & Drop-
Verwenden Sie TPU und Keras mit Google Colaboratory
Fröhliche GUI-Konstruktion mit Elektron und Python
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Zeigen Sie die Google Maps-API mit Rails und Pin-Anzeige an
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
Einfache Buchregistrierung mit Google Books API und Rails
Anzeigen und Aufnehmen von Webkamerabildern mit Python Kivy [GUI]
Installieren Sie Ubuntu 20.04 mit GUI und bereiten Sie die Entwicklungsumgebung vor
GUI-Programmierung mit kivy ~ Teil 3 Video und Suchleiste ~
Authentifizieren Sie Google mit Django
Mit und ohne WSGI
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Deep Learning mit Shogi AI auf Mac und Google Colab
Laden Sie Dateien mit Django-Speicher in Google Cloud Storages hoch und löschen Sie sie