[PYTHON] Versuchen Sie, Englisch PDF Teil 1 zu übersetzen

"Fortsetzung [Python] Lassen Sie uns automatisch englische PDF-Dateien (ohne darauf beschränkt zu sein) mit DeepL- oder Google-Übersetzung in eine Textdatei ohne HTML übersetzen." https://qiita.com/Cartelet/items/a00d4cec8216d04f9274

Ich habe es versucht.

Umgebung

Der Artikel enthält mehrere Versionen, aber dieses Mal habe ich den am 8. August hinzugefügten "Versionscode für erweiterte Textzerlegung" verwendet.

Aktiviert, um Absätze bis zu einem gewissen Grad zu zerlegen, ohne Word zu durchlaufen. Da es (allgemein) Absatz für Absatz übersetzt, ist die Übersetzungsgeschwindigkeit viel schneller als die jedes Satzes.

Ich habe diesen Code als pdftrans.py gespeichert.

Bibliothekseinstellungen usw.


$ python3 pdftrans.py 

Bei Ausführung als


Traceback (most recent call last):
  File "pdftrans.py", line 1, in <module>
    from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'

Weil es herauskam


$ sudo pip3 install selenium

Installiert als. Ich brauchte also auch Pyperclip


$ sudo pip3 install pyperclip

Installiert als.


Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver.exe': 'chromedriver.exe'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "pdftrans.py", line 165, in <module>
    TranslateFromClipboard(*args)
  File "pdftrans.py", line 75, in TranslateFromClipboard
    chrome_options=options)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
    self.service.start()
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/common/service.py", line 83, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

Weil es wurde

https://sites.google.com/a/chromium.org/chromedriver/homeから chromedriver_linux64.zip Herunterladen und entpacken.


$ ls -alh
Insgesamt 16 Millionen
drwxrwxr-x  2 nanbuwks nanbuwks 4.0K 17. August 21:07 .
drwxrwxr-x 91 nanbuwks nanbuwks 56K 17. August 21:06 ..
-rwxr-xr-x 1 nanbuwks nanbuwks 11M 29. Mai 06:05 chromedriver
-rw-rw-r--  1 nanbuwks nanbuwks 5.1M 17. August 21:06 chromedriver_linux64.zip
-rw-r--r--  1 nanbuwks nanbuwks 8.0K 17. August 16:53 pdftrans.py

Ich habe es im selben Verzeichnis wie pdftrans.py abgelegt.

Dann Zeile 9 von pdftrans.py


DRIVER_PATH = 'chromedriver.exe'

Der Ort, an dem er sich befindet, wurde wie folgt geändert.


DRIVER_PATH = './chromedriver'

Vorerst habe ich beschlossen, pdftrans.py in dem Verzeichnis auszuführen, das das Skript enthält, um die PATH-Einstellung zu vereinfachen.


Traceback (most recent call last):
  File "pdftrans.py", line 165, in <module>
    TranslateFromClipboard(*args)
  File "pdftrans.py", line 75, in TranslateFromClipboard
    chrome_options=options)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 84

Ich habe Version 83 verwendet, aber ich habe es auf die neueste Version aktualisiert und in die Version 84.0.4147.125 (Official Build) (64-Bit) geändert.

Lauf


$ python3 pdftrans.py 
1.Englisch → Japanisch 2.Japanisch → Englisch 1
1. DeepL 2.GoogleTranslate  1
Möchten Sie das Übersetzungsergebnis exportieren? Y./n  y
1. txt 2. HTML 3. both    2
Geben Sie einen Namen für die Ausgabedatei ein (Standard ist'translated_text.html')  
Bitte geben Sie den Titel (des Papiers) zigbeebdb ein
Möchten Sie den Fortschritt der Übersetzung hier sehen? Y./n  n
Drücken Sie die Eingabetaste, wenn Sie fertig sind

1/900  0% done


2/900  0% done


3/900  0% done


4/900  0% done

・
・
・

Ergebnis

image.png

Versuchen Sie es mit

――Dieses Mal habe ich das 87-seitige PDF ausprobiert.

8/16 Nachschrift Beschleunigte das Öffnen einer großen Anzahl von Chrome mit mehreren Threads. Dies ist nur HTML-Export. Beachten Sie im Fall von DeepL auch, dass wenn Sie zu viel öffnen, dies eingeschränkt wird und die Übersetzung stoppt.

――Ich dachte, es wäre in Ordnung, wenn ich andere Arbeiten ausführen würde, auch wenn es lange dauern würde, aber da die Zwischenablage gesteuert wird, halte ich Parallelarbeiten für schwierig. ――Die Verwendung wurde in dem Artikel geschrieben, der die Grundlage des Artikels war, auf den verwiesen wurde, aber ich habe versucht, ihn zu verwenden, ohne ihn richtig zu lesen, und das war es. Wenn Sie es richtig gelesen und die PDF-Zeicheninformationen im Voraus in die Zwischenablage kopiert haben, hat es richtig funktioniert!

"[Python] Lassen Sie uns automatisch englische PDF-Dateien (ohne darauf beschränkt zu sein) mit DeepL- oder Google-Übersetzung übersetzen, um daraus eine Textdatei zu machen." https://qiita.com/Cartelet/items/c56477033cda17a2a28a

Postscript Ich habe es mit der Hochgeschwindigkeitsversion 8/16 versucht

Mit 30 gleichzeitigen Parallelen konnte das gleiche 87-seitige 1249-Satzdokument wie oben in etwa 10 Minuten übersetzt werden, aber der Lastdurchschnitt war großartig. image.png

Es scheint gut, entsprechend der Umgebung zu entwickeln, damit kein Overhead-Verlust entsteht.

Als ich es gleichzeitig auf 10 stellte, dauerte die Verarbeitung ungefähr 6 Minuten.

Recommended Posts

Versuchen Sie, Englisch PDF Teil 1 zu übersetzen
Englisch PDF wird ins Japanische übersetzt
Versuchen Sie, mit Python zu übersetzen, während Sie das PDF-Layout beibehalten
Versuchen Sie es mit normaler Linux-Programmierung Teil 7
Versuchen Sie es mit normaler Linux-Programmierung Teil 3
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 1)
Versuchen Sie es mit normaler Linux-Programmierung Teil 4
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 2)
Versuchen Sie es mit normaler Linux-Programmierung Teil 6
Versuchen Sie es mit Pillow auf iPython (Teil 1)
Versuchen Sie es mit Pillow auf iPython (Teil 2)
Versuchen Sie es mit TensorFlow Part 2
Versuchen Sie es mit Pillow auf iPython (Teil 3).