[GO] Versuchen Sie, mit Python zu übersetzen, während Sie das PDF-Layout beibehalten

Einführung

image.png

[Es gibt verschiedene Methoden, um PDF maschinell zu übersetzen](https://needtec.sakura.ne.jp/wod07672/2020/05/07/pdf%e3%82%92%e7%bf%bb%e8%a8% b3% e3% 81% 97% e3% 81% 9f% e3% 81% 84 /) ist DocTranslator in dem Sinne, dass es das Layout beibehält und übersetzt. ) Ist einfach zu bedienen. Es scheint jedoch eine Größenbeschränkung zu geben, und PDF32000_2008.pdf usw. konnte nicht übersetzt werden. Ich werde am Ende.

Lassen Sie uns diesmal überlegen, wie Sie übersetzen können, ohne das Layout zu beschädigen. Aus der Schlussfolgerung heraus ist die diesmal erläuterte Methode problematisch. Wenn Sie also eine andere Methode verwenden können, empfehle ich eine andere Methode.

Übersetzung als Kommentar in PDF einbetten

Es wäre schön, wenn Sie die Übersetzung in den Text einbetten könnten, ohne das Layout wie DocTranslator zu beschädigen, aber ich kann vorhersagen, dass es nicht auf verschiedene Arten funktionieren wird, also als Kommentar Ich werde die Übersetzung einbetten.

Das Ergebnis der Übersetzung von PDF32000_2008.pdf lautet beispielsweise wie folgt.

http://needtec.sakura.ne.jp/doc/tmp/output.pdf

Bei Anzeige mit Adobe Acrobat Reader wird dies wie folgt angezeigt.

Überblick

Der Mechanismus dieser Übersetzung ist wie folgt. image.png

Die CSV, die den zu übersetzenden Text aus dem Original-PDF extrahiert, und der JSON, der Informationen wie die Position des Textes speichert, werden extrahiert. Laden Sie dann die CSV auf Google Drive hoch und öffnen Sie sie in einer Google-Tabelle. Verwenden Sie die GOOGLE TRANSLATE-Formel (https://support.google.com/docs/answer/3093331?hl=ja) in der Google-Tabelle, um den Quelltext zu übersetzen. Laden Sie anschließend die mit der Google-Tabelle bearbeitete CSV herunter und fügen Sie einen Kommentar hinzu, der die Übersetzung in PDF basierend auf dem JSON beschreibt, in dem die CSV und die Position des Texts gespeichert sind.

wie benutzt man

Vorbereitungen

    1. Bereiten Sie Python 3.7.5 vor.
  1. Installieren Sie die Bibliothek.

    1. Machen Sie sich bereit für die Verwendung der Google Drive-API und der Google Sheets-API. Sie sollten bereit sein, indem Sie den folgenden Schnellstart ausführen.

Google Drive API- Python Quickstart https://developers.google.com/drive/api/v3/quickstart/python

Google Sheets API- Python Quickstart https://developers.google.com/sheets/api/quickstart/python

Während dieses Schnellstarts wird ein JSON mit den Anmeldeinformationen erstellt. Verwenden Sie diesen.

  1. Laden Sie das erforderliche Skript aus dem Folgenden herunter. https://github.com/mima3/pdf_translate

Übersetzungsmethode

    1. Laden Sie das PDF, das Sie übersetzen möchten, auf Ihren lokalen PC herunter.
  1. Erstellen Sie mit dem folgenden Befehl einen JSON, der die Textinformationen und die Position aufzeichnet, und eine CSV, die eine Liste der Texte aus der zu übersetzenden PDF aufzeichnet.

python ./analyze_pdf_text.py PDF32000_2008.pdf

Die folgenden Dateien werden erstellt.

  1. Geben Sie die Übersetzung in die zweite Spalte von PDF32000_2008.pdf.csv ein. Dieses Mal werde ich es in eine Google-Tabelle hochladen und es mit der GOOGLE TRANSLATE-Formel übersetzen. Das Skript, das dies automatisiert, lautet wie folgt.
python ./translate_google_sheets.py PDF32000_2008.pdf.csv client_secret.json
  1. Führen Sie den folgenden Befehl aus, um die Übersetzung als Kommentar einzubetten
python ./embed_annots.py PDF32000_2008.pdf.json output.pdf

Beschreibung der Bibliothek, die Sie verwenden

Wie erhalten Sie die Textinformationen von PDF?

Ich verwende PyMuPDF.

Sie können die Position des Textblocks und seines Inhalts mithilfe der Methode Page.getText ermitteln.

** Beispielcode **

import fitz
doc = fitz.open('PDF32000_2008.pdf')
print(doc[5].getText('blocks'))

** Ausgabebeispiel **

[(36.779998779296875, 39.29692077636719, 130.1901397705078, 52.363121032714844, 'PDF 32000-1:2008', 0, 0),Abkürzung]

Es ist auch möglich, es in Worteinheiten abzurufen, indem der Wert des ersten Arguments von getText auf "Wörter" gesetzt wird.

** Ausgabebeispiel **

[(36.779998779296875, 39.29692077636719, 58.759761810302734, 52.363121032714844, 'PDF', 0, 0, 0),Abkürzung]

Wenn Sie "json" oder "dict" angeben, erhalten Sie detailliertere Informationen wie Schriftarten und Farben.

{
 "width":595.0,
 "height":842.0,
 "blocks":[
  {
   "type":0,
   "bbox":[
    36.779998779296875,
    39.29692077636719,
    130.1901397705078,
    52.363121032714844
   ],
   "lines":[
    {
     "wmode":0,
     "dir":[
      1.0,
      0.0
     ],
     "bbox":[
      36.779998779296875,
      39.29692077636719,
      130.1901397705078,
      52.363121032714844
     ],
     "spans":[
      {
       "size":10.979999542236328,
       "flags":20,
       "font":"DDPEIM+Helvetica-Bold",
       "color":0,
       "text":"PDF 32000-1:2008",
       "bbox":[
        36.779998779296875,
        39.29692077636719,
        130.1901397705078,
        52.363121032714844
       ]
      }
     ]
    }
   ]
  },
Abkürzung

Wie bettet man Anmerkungen ein?

Verwenden Sie Page.addTextAnnot. Wenn Sie etwas anderes als die diesmal hinzugefügten einfachen ausprobieren möchten, ist der folgende Code hilfreich.

https://github.com/pymupdf/PyMuPDF-Utilities/blob/master/annotations/new-annots.py

CSV-Upload

[Laden Sie CSV auf Google Drive hoch, bearbeiten Sie es als Google-Tabelle und laden Sie es dann herunter](https://needtec.sakura.ne.jp/wod07672/2020/05/08/google-drive%e3%81%abcsv% e3% 82% 92% e3% 82% a2% e3% 83% 83% e3% 83% 97% e3% 83% ad% e3% 83% bc% e3% 83% 89% e3% 81% 97% e3% 81% a6google% e3% 82% b9% e3% 83% 97% e3% 83% ac% e3% 83% 83% e3% 83% 89% e3% 82% b7% e3% 83% bc% e3% 83% 88% e3% 81% a8 /) enthält Beispielcode nur zum Hochladen.

Auszug aus dem Upload-Prozess


    service_drive = build('drive', 'v3', credentials=creds)

    #Laden Sie CSV zur Bearbeitung in Google Spreadsheet hoch.
    # https://developers.google.com/drive/api/v3/manage-uploads#python
    file_metadata = {
        'name': 'Test',
        'mimeType': 'application/vnd.google-apps.spreadsheet'
    }
    media = MediaFileUpload('test.csv',
                            mimetype='text/csv',
                            resumable=True)
    file = service_drive.files().create(body=file_metadata,
                                    media_body=media,
                                    fields='id').execute()
    print('File ID: %s' % file.get('id'))

Durch Angabe von "application / vnd.google-apps.spreadsheet" im mimeType des body-Parameters von create wird CSV als Google-Tabelle hinzugefügt.

Als Google-Tabelle bearbeiten

[Laden Sie CSV auf Google Drive hoch, bearbeiten Sie es als Google-Tabelle und laden Sie es dann herunter](https://needtec.sakura.ne.jp/wod07672/2020/05/08/google-drive%e3%81%abcsv% e3% 82% 92% e3% 82% a2% e3% 83% 83% e3% 83% 97% e3% 83% ad% e3% 83% bc% e3% 83% 89% e3% 81% 97% e3% 81% a6google% e3% 82% b9% e3% 83% 97% e3% 83% ac% e3% 83% 83% e3% 83% 89% e3% 82% b7% e3% 83% bc% e3% 83% 88% e3% 81% a8 /) enthält Beispielcode zum Bearbeiten von CSV, das mit der Google Sheets-API auf Google Drive hochgeladen wurde.

Dies ist für kleine CSVs in Ordnung, aber für die Aktualisierung einer großen Anzahl von Zeilen ist die GOOGLE TRANSLATE-Formel (https://support.google.com/docs/answer/3093331?hl=ja) vollständig. Es darf nicht geschnitten werden. In diesem Fall zeigt die Zelle anstelle des übersetzten Textes "Laden ..." oder "Laden ..." an. Dies ist auch ein Problem, wenn Sie eine Google-Tabelle auf Ihrem Bildschirm anstatt über die API bearbeiten.

Dieses Mal konnte ich keine gute Problemumgehung finden, daher überprüfe ich alle 10 Sekunden, ob "Laden ..." oder "Laden ..." nicht vorhanden ist. https://github.com/mima3/pdf_translate/blob/master/translate_google_sheets.py#L45

Außerdem aktualisiere ich diesmal ehrlich die Zelle mit der Aktualisierungsmethode, aber diejenigen, die [batchUpdate] verwendet haben (https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate) Sieht gut aus.

Laden Sie die Google-Tabelle herunter

[Laden Sie CSV auf Google Drive hoch, bearbeiten Sie es als Google-Tabelle und laden Sie es dann herunter](https://needtec.sakura.ne.jp/wod07672/2020/05/08/google-drive%e3%81%abcsv% e3% 82% 92% e3% 82% a2% e3% 83% 83% e3% 83% 97% e3% 83% ad% e3% 83% bc% e3% 83% 89% e3% 81% 97% e3% 81% a6google% e3% 82% b9% e3% 83% 97% e3% 83% ac% e3% 83% 83% e3% 83% 89% e3% 82% b7% e3% 83% bc% e3% 83% 88% e3% 81% a8 /) hat einen Beispiel-Download.

    # download
    request = service_drive.files().export_media(fileId=file_id, mimeType='text/csv')
    fh = io.BytesIO()
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print ("Download %d%%." % int(status.progress() * 100))
    with open('download.csv', 'wb') as f:
        f.write(fh.getvalue())

Es gibt zwei Möglichkeiten zum Herunterladen von Google Drive: get_media und export_media. https://developers.google.com/drive/api/v3/manage-downloads

Dieses Mal werde ich export_media verwenden, da ich den konvertierten Google-Spread einmal als CSV herunterladen werde.

Zusammenfassung

Vorläufig konnte ich ein PDF mit etwa 700 Seiten wie dieses übersetzen. Diese Methode ist jedoch umständlich und zeitaufwändig. Wenn also eine andere Methode möglich ist, sollten Sie eine andere Methode in Betracht ziehen. Zumindest wenn Sie eine andere Übersetzungs-API verwenden können, müssen Sie sich nicht um das Hochladen, Einbetten der Formel und das erneute Herunterladen kümmern.

Recommended Posts

Versuchen Sie, mit Python zu übersetzen, während Sie das PDF-Layout beibehalten
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
[Automatisierung] Extrahieren Sie die Tabelle als PDF mit Python
Versuchen Sie es mit Python.
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Konvertieren Sie das Bild in .zip mit Python in PDF
Versuchen Sie, das Python Data Science-Handbuch ins Japanische zu übersetzen
[Python] PDF automatisch mit DeepL übersetzen, dabei das Originalformat beibehalten. [Windows / Word erforderlich]
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Versuchen Sie, Englisch PDF Teil 1 zu übersetzen
Integrieren Sie PDF-Dateien in Python
Versuchen Sie, Python mit Try Jupyter auszuführen
Rufen Sie die API mit python3 auf.
Versuchen Sie die Gesichtserkennung mit Python
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, die verstümmelten Zeichen im angehängten Dateinamen mit Python zu entschlüsseln
Versuchen Sie es mit Python + Beautiful Soup
Extrahieren Sie die xz-Datei mit Python
Probieren Sie das Python LINE Pay SDK aus
Versuchen Sie, Facebook mit Python zu betreiben
Versuchen Sie die Singularwertzerlegung mit Python
Holen Sie sich das Wetter mit Python-Anfragen
Erste Python ② Versuchen Sie, Code zu schreiben, während Sie die Funktionen von Python untersuchen
Holen Sie sich das Wetter mit Python-Anfragen 2
Finden Sie die Bearbeitungsentfernung (Levenshtein-Entfernung) mit Python
Klicken Sie mit Python auf die Etherpad-Lite-API
Installieren Sie das Python-Plug-In mit Netbeans 8.0.2
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Ich mochte den Tweet mit Python. ..
Beherrsche den Typ mit Python [Python 3.9 kompatibel]
Versuchen Sie es mit dem Python Cmd-Modul
Versuchen Sie die Frequenzsteuerungssimulation mit Python
Versuchen Sie, das Bild mit opencv2 zu verwischen
Versuchen Sie, den kürzesten Weg mit Python + NetworkX + Social Data zu lösen
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Machen Sie die Python-Konsole mit UNKO bedeckt
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Versuchen Sie es mit der Wunderlist-API in Python
[Python] Legen Sie den Diagrammbereich mit matplotlib fest
Versuchen Sie, die Kraken-API mit Python zu verwenden
Hinter dem Flyer: Docker mit Python verwenden
Lernen Sie die Grundlagen, während Sie Python-Variablen berühren
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Probieren Sie den Variational-Quantum-Eigensolver (VQE) -Algorithmus mit Blueqat aus
Überprüfen Sie die Existenz der Datei mit Python
Versuchen Sie, die Kamera mit Pythons OpenCV zu verwenden
[Python] Ruft den Variablennamen mit str ab
[Python] Runden Sie nur mit dem Operator ab
Zeigen Sie Python 3 im Browser mit MAMP an
Durchsuche das Labyrinth mit dem Python A * -Algorithmus