[Python] Traduisons automatiquement le PDF anglais (mais sans s'y limiter) avec la traduction DeepL ou Google pour en faire un fichier texte.

Post-scriptum 8/6

Amélioré pour rendre le résultat de sortie plus facile à voir Suite [Python] Traduisons automatiquement le PDF anglais (mais sans s'y limiter) avec la traduction DeepL ou Google dans un fichier texte, pas de HTML.

introduction

C'est difficile de lire les journaux anglais, n'est-ce pas? Faisons traduire, les perspectives seront bien meilleures.

Méthode

Le problème avec la traduction des PDF est la difficulté de gérer les fichiers PDF. Même si vous comptez sur la bibliothèque pour extraire les caractères automatiquement, cela ne fonctionne pas ou l'ordre des phrases est perturbé. Donc cette fois, je voudrais traduire via le presse-papiers.

Le flux est

Ouvrez le fichier PDF avec Chrome etc. et sélectionnez tout "Ctrl + A" pour copier     ↓ Exécutez le programme     ↓ Décomposez les phrases de manière à ce qu'elles ne dépassent pas la limite de caractères (5000 caractères) et soient séparées par des points.     ↓ Lancer sur un site de traduction     ↓ Obtenir des résultats     ↓ production

C'est comme ça.

code

Nécessite Selenium et pyperclip pour fonctionner. Se il vous plaît installer.
pip install selenium
pip install pyperclip

Veuillez le mettre dans le même répertoire → Chrome Driver

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time
import pyperclip as ppc

DRIVER_PATH = 'chromedriver.exe'

options = Options()
options.add_argument('--disable-gpu')
options.add_argument('--disable-extensions')
options.add_argument('--proxy-server="direct://"')
options.add_argument('--proxy-bypass-list=*')
options.add_argument('--start-maximized')


def parse_merge(text, n=4900):
    sentences = []
    sentence = ""
    for i in " ".join(text.splitlines()).split("."):
        if len(sentence) + len(i) > n:
            sentences.append(sentence)
            sentence = ""
        sentence += i + "."
    sentences.append(sentence)
    return sentences


def TranslateFromClipboard(tool, write, filename, isPrint):
    driver = webdriver.Chrome(executable_path=DRIVER_PATH,
                              chrome_options=options)
    url = 'https://www.deepl.com/ja/translator' if tool == "DeepL" else 'https://translate.google.co.jp/?hl=ja&tab=TT&authuser=0#view=home&op=translate&sl=auto&tl=ja'
    driver.get(url)
    transSentence = ""
    if tool == "DeepL":
        textarea = driver.find_element_by_css_selector(
            '.lmt__textarea.lmt__source_textarea.lmt__textarea_base_style')
    elif tool == "GT":
        textarea = driver.find_element_by_id('source')
    for sentence in parse_merge(ppc.paste()):
        cbText = ppc.paste()
        ppc.copy(sentence)
        textarea.send_keys(Keys.CONTROL, "v")
        ppc.copy(cbText)
        transtext = ""
        while transtext == "":
            if tool == "DeepL":
                transtext = driver.find_element_by_css_selector(
                    '.lmt__textarea.lmt__target_textarea.lmt__textarea_base_style'
                ).get_property("value")
            elif tool == "GT":
                try:
                    transtext = driver.find_element_by_css_selector(
                        '.tlid-translation.translation').text
                except:
                    pass
            time.sleep(1)
        if isPrint: print(transtext)
        transSentence += transtext
        textarea.send_keys(Keys.CONTROL, "a")
        textarea.send_keys(Keys.BACKSPACE)
    driver.quit()
    if write:
        with open(filename, "w", encoding='UTF-8') as f:
            for sentence in transSentence.split("。"):
                f.write(sentence + "。\n")


if __name__ == "__main__":
    args = ["DeepL", False, "translated_text.txt", True]
    if input("1. DeepL 2.GoogleTranslate  ") == "2": args[0] = "GT"
    if input("Voulez-vous écrire le résultat de la traduction dans un fichier? Oui/n  ") == "y":
        args[1] = True
        filename = input(
            "Entrez un nom pour le fichier de sortie (la valeur par défaut est'translated_text.txt')  ")
        if filename:
            args[2] = filename
    if input("Souhaitez-vous voir la progression de la traduction ici? Oui/n  ") == "n":
        args[3] = False
    input("Appuyez sur Entrée lorsque vous êtes prêt")
    TranslateFromClipboard(*args)

comment utiliser

  1. Enregistrez le code ci-dessus en tant que fichier Python avec un nom approprié.
  2. Copiez le texte du PDF (etc.).
  3. Exécutez le programme.
  4. Entrez lorsque vous y êtes invité pour divers paramètres.
  5. Lorsque vous êtes prêt (ayez juste une copie du texte anglais jusqu'à ce point), appuyez sur Entrée.
  6. Le navigateur s'ouvrira et se déplacera librement, alors attendez de le regarder.
  7. Lisez le résultat de la traduction.

Lors de la sortie d'un fichier texte, j'essaie de casser la ligne au niveau du signe de ponctuation pour le moment, veuillez donc le réécrire comme il convient.

Résumé

DeepL semble être en mesure de traduire des documents moyennant des frais, mais si possible, ceux qui veulent en bénéficier gratuitement, À l'origine, les documents peuvent être traduits avec Google Traduction, mais les gens qui sont désespérés parce qu'il y a des endroits qui ne sont pas traduits ou que l'environnement des formules est foiré Essayez-le, peut-être qu'il progressera.

Recommended Posts

[Python] Traduisons automatiquement le PDF anglais (mais sans s'y limiter) avec la traduction DeepL ou Google pour en faire un fichier texte.
Traduisez automatiquement DeepL en anglais avec Python et Selenium
Expérimentez pour créer un PDF indépendant pour Kindle avec Python
Faisons une interface graphique avec python.
Faisons un graphe avec python! !!
Reconnaissance vocale en anglais avec python [speech to text]
Faisons un jeu de shiritori avec Python
Faisons la voix lentement avec Python
Créez un framework Web avec Python! (1)
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
Comment déposer Google Docs dans un dossier dans un fichier .txt avec python
Si vous voulez créer un bot discord avec python, utilisons un framework
Comment lire un fichier CSV avec Python 2/3
Je veux faire un jeu avec Python
Essayez de créer un code de "décryptage" en Python
Remplaçons UWSC par Python (5) Faisons un robot
Essayez de créer un groupe de dièdre avec Python
Je veux écrire dans un fichier avec Python
[Python] Traduisez automatiquement les PDF avec DeepL tout en conservant le format d'origine. [Windows / Word requis]
Faisons un outil de veille de commande avec python
Faire une copie d'un fichier Google Drive à partir de Python
Convertir un fichier texte avec des valeurs hexadécimales en fichier binaire
Essayez de créer un jeu simple avec Python 3 et iPhone
[Super facile] Faisons un LINE BOT avec Python.
Créons un client de socket Web avec Python. (Authentification par jeton d'accès)
Probablement le moyen le plus simple de créer un pdf avec Python 3
Publier un message sur Google Hangouts Chat avec un fil de discussion (Python)
Faites une loterie avec Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
Comment faire une commande pour lire le fichier de paramètres avec pyramide
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Je souhaite rechercher le texte intégral avec elasticsearch + python
Arrêtons de copier. Présentation de flati, un module qui s'aplatit avec Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
Sentons-nous comme un chercheur de matériaux avec python [Introduction à pymatgen]
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
Un codec Python spécial qui semble savoir mais ne sait pas
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
[ROS2] Comment lire un fichier bag avec le lancement au format python
Essayez d'ajouter un mur à votre fichier IFC avec IfcOpenShell python
[Python] Quand j'ai essayé de créer un outil de décompression avec un fichier zip que je connaissais juste, j'étais accro à sys.exit ()