De nos jours, je ne peux pas abandonner la traduction automatique pour lire la littérature anglaise. Lorsque cela se produit, je souhaite en particulier un outil qui traduit automatiquement les fichiers PDF anglais en appuyant simplement sur un bouton. Cependant, le PDF a un mélange de notes de bas de page et de numéros de page en plus du texte, il est donc difficile d'extraire uniquement les données de texte nécessaires. J'ai créé un outil ** Text_translator ** qui copie manuellement les données de texte et effectue de manière interactive le traitement ultérieur dans l'interface graphique.
--GUI est créé avec tkinter
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
#Que faire lorsque vous cliquez sur le bouton 1
def ButtonClick1():
lines = input_box.get('1.0', 'end -1c') #Récupère la chaîne de caractères saisie dans le champ de saisie
#"" Avant le saut de ligne.」、「."」、「.Remplacez "" et ":" par des caractères factices
words = [".\n",".\"\n",".”\n",":\n"]
for i, word in enumerate(words):
lines = lines.replace(word,"XXX" + str(i))
lines = lines.replace("-\n", "") #"" Avant le saut de ligne-Supprimé
lines = lines.replace("\n", " ") #Supprimer le symbole de saut de ligne
#Annuler les caractères factices et ajouter plus de lignes vides
for i, word in enumerate(words):
lines = lines.replace("XXX" + str(i), word + "\n")
lines = lines.encode('utf-8', "ignore").decode('utf-8') #Supprimez les caractères que Python ne peut pas gérer.
processed_box.delete('1.0', 'end') #Effacer la colonne des résultats de mise en forme
processed_box.insert('1.0', lines) #Sortie du résultat de mise en forme dans la colonne des résultats de mise en forme
#Que se passe-t-il lorsque le bouton 2 est cliqué
def ButtonClick2():
lines = get_text()
while True:
if len(lines) >= 5000: #Lorsque le nombre de caractères traduits est égal ou supérieur à 5000
lines1 = lines[:5000].rsplit('\n\n', 1)[0] #Paragraphes jusqu'à 5000 caractères
lines2 = lines[:5000].rsplit('\n\n', 1)[1] + lines[5000:] #Paragraphe restant
translator = Translator()
lines1 = translator.translate(lines1, dest='ja').text #Google Traduction
translate_box.insert('end', lines1 + '\n\n') #Affiché dans la colonne des résultats de la traduction
lines = lines2 #Définir le reste du paragraphe
else: #Lorsque le nombre de caractères traduits est inférieur à 5000
translator = Translator()
lines = translator.translate(lines, dest='ja').text #Google Traduction
translate_box.insert('end', lines) #Affiché dans la colonne des résultats de la traduction
break
#Que se passe-t-il lorsque vous cliquez sur le bouton 3
def ButtonClick3():
lines = get_text()
#Veuillez saisir ici la CLÉ que vous avez émise
DEEPL_API_KEY = 'XXXXX'
#Créer un dictionnaire de paramètres à inclure dans la requête URL
params = {
"auth_key": DEEPL_API_KEY,
"text": lines,
"target_lang": 'JA' #Définissez la langue du texte de sortie sur l'anglais
}
#POST avec paramètres
request = requests.post("https://api.deepl.com/v2/translate", data=params)
result = request.json()
lines = result["translations"][0]["text"]
translate_box.insert('end', lines) #Affiché dans la colonne des résultats de la traduction
#Que se passe-t-il lorsque vous cliquez sur le bouton 4
def ButtonClick4():
edit_text = processed_box.get('1.0', 'end -1c') #Récupère la chaîne de caractères saisie dans le champ de résultat du formatage
translate_text = translate_box.get('1.0', 'end -1c') #Obtenez la chaîne de caractères saisie dans le champ de résultat de la traduction
fTyp=[('fichier Word',"*.docx")] #Sélectionnez un modèle Word Bilingual
iDir='.'
filename=tkFileDialog.askopenfilename(filetypes=fTyp,initialdir=iDir)
document = Document(filename)
for paragraph in document.paragraphs:
paragraph.text = paragraph.text.replace("Le texte original est donné ici.",edit_text) #Entrez le texte d'origine dans le tableau de traduction Word
paragraph.text = paragraph.text.replace("La traduction est donnée ici.",translate_text) #Inclure la traduction dans le tableau de traduction Word
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("Le texte original est donné ici.",edit_text) #Entrez le texte d'origine dans le tableau de traduction Word
paragraph.text = paragraph.text.replace("La traduction est donnée ici.",translate_text) #Inclure la traduction dans le tableau de traduction Word
dt_now = datetime.datetime.now() #Enregistrer le tableau de comparaison Word
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("Création terminée",os.path.basename(savefilename) + "Je l'ai sauvegardé.") #Afficher le résultat de l'enregistrement
def get_text():
lines = processed_box.get('1.0', 'end -1c') #Récupère la chaîne de caractères saisie dans le champ de résultat du formatage
#Obtenez le nombre de caractères et affichez-le à l'écran
label = tk.Label(root, text = "nombre de mots" + str(len(lines)) + " ", font = ("Helvetica",14))
label.place(relx = 0.58, y = 20)
translate_box.delete('1.0', 'end') #Effacer la colonne des résultats de la traduction
return lines
#Programme principal
root = tk.Tk()
root.geometry("1600x800")
root.title("Text_translator")
#Paramètres d'étiquette
label1 = tk.Label(root, text = "Entrez du texte", font = ("Helvetica",14))
label1.place(x = 20, y = 20)
label2 = tk.Label(root, text = "Résultat du formatage", font = ("Helvetica",14))
label2.place(relx = 0.34, y = 20)
label3 = tk.Label(root, text = "Résultat de la traduction", font = ("Helvetica",14))
label3.place(relx = 0.67, y = 20)
#Paramètres des boutons
button1 = tk.Button(root, text = "Façonner", font = ("Helvetica",14), command = ButtonClick1)
button1.place(x = 200, y = 15)
button2 = tk.Button(root, text = "Google Traduction", font = ("Helvetica",14), command = ButtonClick2)
button2.place(relx = 0.42, y = 15)
button3 = tk.Button(root, text = "Traduction DeepL", font = ("Helvetica",14), command = ButtonClick3)
button3.place(relx = 0.50, y = 15)
button4 = tk.Button(root, text = "Création de table de traduction de mots", font = ("Helvetica",14), command = ButtonClick4)
button4.place(relx = 0.75, y = 15)
#Paramètres de la zone de saisie
input_box = S.ScrolledText(root, font = ("Helvetica",12))
input_box.place(relheight = 0.89, relwidth = 0.32, relx = 0.01, y = 60)
#Mise en forme des paramètres de la zone de résultats
processed_box = S.ScrolledText(root, font = ("Helvetica",12))
processed_box.place(relheight = 0.89, relwidth = 0.32, relx = 0.34, y = 60)
#Paramètres de la boîte de traduction
translate_box = S.ScrolledText(root, font = ("Helvetica",12))
translate_box.place(relheight = 0.89, relwidth = 0.32, relx = 0.67, y = 60)
root.mainloop()
--Copiez le texte dans la fenêtre de gauche
Format
pour supprimer les sauts de ligne supplémentaires dans le texte et l'afficher dans la fenêtre du milieu.Google Translate
ou DeepL Translate
pour afficher le résultat de la traduction dans la fenêtre de droite.De nombreuses personnes ont créé des outils d'automatisation de la traduction Google, mais je ne vois pas beaucoup d'outils qui utilisent l'interface graphique. L'interface graphique est facile à comprendre. ** Si vous l'aimez, veuillez LGTM. ** **
Recommended Posts