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.
--GUI wird mit tkinter erstellt
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()
Format
, um die zusätzlichen Zeilenumbrüche im Text zu entfernen und im mittleren Fenster anzuzeigen.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