[PYTHON] Exécuter la traduction Google et la traduction DeepL avec l'interface graphique

introduction

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.

Module à utiliser

--GUI est créé avec tkinter

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

#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()

Image de l'écran et utilisation

画面イメージ.png --Copiez le texte dans la fenêtre de gauche

fin

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

Exécuter la traduction Google et la traduction DeepL avec l'interface graphique
Traduire - Aide de PHP_UML avec Google Traduction
Traduisez automatiquement DeepL en anglais avec Python et Selenium
[GUI en Python] PyQt5-Glisser-déposer-
Utilisez TPU et Keras avec Google Colaboratory
Construction d'interface graphique heureuse avec électron et python
Essayez d'exécuter Google Chrome avec Python et Selenium
Afficher l'API Google Maps avec Rails et affichage des broches
Créez une application graphique native avec Py2app et Tkinter
Enregistrement facile des livres avec l'API et Rails de Google Livres
Afficher et prendre des images de caméra Web avec Python Kivy [GUI]
Installez Ubuntu 20.04 avec GUI et préparez l'environnement de développement
Programmation GUI avec kivy ~ Partie 3 Vidéo et barre de recherche ~
Authentifier Google avec Django
Avec et sans WSGI
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
Importez et supprimez des fichiers dans Google Cloud Storages avec django-storage