Korrekturlesen von PDFs mit pdftotxt & grep automatisieren

In gedruckte & gebundene Abschlussarbeiten guckt man lieber nicht nochmal rein, oder? Der eine oder andere Tippfehler schleicht sich immer durch! Aber mit zwei Kommandozeilenzeilenprogrammen, kann man verhindern, dass sich die gleichen Fehler wiederholen.

PDFs-gegenlesen
Fehler per Auge finden:  Das ist auf Dauer weder erquicklich, noch ergiebig.

Diese Anleitung eignet sich vor allem für eigene Texte, die man nach dem Schreiben schon gefühlt auswendig kann, sowie für LaTeX-Quelltexte, die aufgrund vieler Befehls- und Sonderzeichen unübersichtlich sind. Die Fehler in den schon druckreifen PDFs sollen doch bitteschön automatisch gefunden werden! Also los: basteln wir uns eine persönliche Ergänzung zu Wörterbuch und Rechtschreibkorrektur des jeweiligen Schreibprogramms oder LaTeX-Editors! Einziger Haken: Man muss die Fehler(typen) kennen. Doch dazu später.

Die Werkzeuge & Kommandos

pdftotext“ ist ein Kommandozeilenwerkzeug zum (der Name sagt’s schon) Extrahieren der Textdaten aus PDF-Dateien. „grep“ wiederum durchsucht Textdaten nach definierbaren Worten oder Mustern. Beide sind für Linux, Mac OS X und Windows verfügbar (Installationsanweisungen bitte googlen), und lassen sich leicht zu einem feinen Korrekturlesehelferlein verknüpfen.

Das erste Kommando lautet einfach (angenommen Du bist schon im gewünschten Ordner, wenn nicht, siehe):

pdftotext Name-der-Datei.pdf

Es speichert den PDF-Text als gleichnamige TXT-Datei im selben Ordner ab. Nun zur Fehlersuche:

grep --color --extended-regexp --ignore-case --file=Fehlermuster.txt Name-der-Datei.txt

Keine Angst vor der Fehlermeldung! Alleine kann dieses Kommando noch nix, denn Fehlermuster.txt fehlt noch. Dazu wird diese Datei einfach mit einem Texteditor im selben Ordner angelegt und mit einem Fehlermuster pro Zeile befüllt (siehe Beispiel). Der Dateiname ist im Prinzip auch egal. Hauptsache, sie ist genauso benannt, wie im Parameter --file= angegeben.

Fehlermuster definieren

Oder „Musterfehler“? Hm! Um dies zu tun , wagen wir uns nun in die wunderbare Welt der „regulären Ausdrücke“ vor (auf Englisch „regular expressions“, „RegExp“, etc.). grep wird durch den Parameter --extended-regexp verklickert, dass hier Profis am Werk sind 😉   Wie oben angemerkt, sind es genau diese RegExps, die man kennen oder sich zusammenbasteln muss, um vom konkreten Tippfehler (die sollte die Rechtschreibkorrektur finden) auf Fehlertypen zu generalisieren. Beispiele für solche RegExps sind:

  • \{ und \{, die in einem aus LaTeX kompilierten PDF tendenziell kaputte LaTeX-Befehle anzeigen.
  • _\d{4} bspw. zeigt (zumindest bei Verwendung des ZoteroBibTeX-Exports) an, dass Zitatschlüssel nicht aufgelöst wurden (siehe Fehlersuchbild oben; Auflösung unten).
  • Auch kompliziertere Fehlermuster wie z.B. (\b\S+\b)\s+\b\1\b sind möglich (siehe Fehlersuchbild oben; Auflösung unten). Skurrilerweise kann Word standardmäßig gerade solche Fehler finden, und dafür vermissen LaTeX-Nutzer es auch heimlich ;->

Fehler finden

Sobald Fehlermuster.txt erstellt ist, bitte den ganzen Befehl auf der Kommandozeile wiederholen (z.B. via Pfeiltaste-hoch):

grep --color --extended-regexp --ignore-case --file=Fehlermuster.txt Name-der-Datei.txt

Und die Fundstellen erscheinen farblich markiert in der Kommandozeile. Da die Fehlerstellen im Kontext angezeigt werden, sind sie schnell im (LaTeX-)Quelldokument, aus dem das PDF erzeugt wurde, gefunden und korrigiert.

Fehlersuche in PDFs mittels der Kommandozeilenwerkzeuge pdftotext & grep.
Fehler per pdftotext & grep gefunden.

Noch mehr automatisieren

Etwas eleganter geht es noch ohne Zwischenspeicherung des extrahierten Textes mittels sog. Pipe. Das unscheinbare Zeichen | „pumpt“ den mittels - in die Kommandozeile umgelenkten PDF-Text direkt in die Suchfunktion:

pdftotext Name-der-Datei.pdf - | grep --color --extended-regexp --ignore-case --file=Fehlermuster.txt

Fazit

PDFs automatisiert nach bekannten Fehler(type)n durchsuchen zu können, ermöglicht das Arbeiten nach der Devise: Aus Fehlern sofort lernen, und sie nicht noch einmal machen! Wie bei automatischen Softwaretests. Wenn beim  Korrekturlesen per Auge ein Fehler gefunden wird, ihn schnell in Fehlermuster.txt eintragen, sodass er zukünftig automatisch gefunden wird. Noch eleganter geht’s mittels makefile, z.B. um die PDFs automatisch nach dem Kompilieren der LaTeX-Quellen zu prüfen (und letztere auch gleich, aber mit einem separaten Satz Fehlermustern).

Mit so einem Korrektursystem an der Hand, kann es getrost heißen: Nach der Schreibarbeit ist vor der Schreibarbeit!


2 Gedanken zu „Korrekturlesen von PDFs mit pdftotxt & grep automatisieren“

  1. Ich muss also alle Fehler, die ich beim händischen Korrigieren von meinen Arbeiten entdecke in reguläre Ausdrücke verwandeln und dann in meine „fehlermuster.txt“-Datei einfügen, sodass sie beim nächsten Mal gefunden werden.
    Habe ich das richtig verstanden?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.