Vor einigen Jahren habe ich einige Artikel zum Thema Cuneiform und Sandwich-PDFs geschrieben (hier und hier). Diese sind doch arg veraltet und funktionieren nur noch sehr bedingt unter Ubuntu 14.04 und später. Mein aktueller Beitrag zeigt, wie man aus eingescannten PDFs trotzdem lesbare Sandwiches erstellen kann.
Ich besitze eine Reihe von eingescannten PDF-Texten. Diese habe ich entweder über die Fernleihe einer Uni-Bibliothek bekommen oder selbst irgendwann einmal eingescannt. Das ist zwar praktisch, aber zum Archivieren oder durchsuchen der Texte eignen sich solche PDFs nur bedingt. Sandwich-PDFs versprechen Abhilfe: Man lässt eine Texterkennung über das im PDF liegende Bild laufen. Das Programm „merkt“ sich dabei quasi die Position der einzelnen Zeichen, so dass ein eingescannter Text nachträglich durchsucht und markiert werden kann. Das dabei verwendete Format nennt sich hocr.
Es existieren für Ubuntu einige Programme, die versprechen, bereits bestehende PDFs in Sandwich-PDFs umzuwandeln. Ubuntuusers nennt gleich eine ganze Reihe davon, z.B. YAGF oder ocrodjvu. Ich habe einige Programme ausprobiert und war eigentlich mit keinem so recht zufrieden. Manche sind für ältere Ubuntu-Versionen gemacht, andere stürzten auf meinem 64-Bit-System ab oder zwingen mich, eine ganze Reihe von Fremdpaketen zu installieren. Ich will eigentlich nur einen einfachen Weg, um PDFs in Sandwiches umzuwandeln − eine grafische Oberfläche brauche ich dazu nicht. Deshalb habe ich ein einfaches Skript geschrieben, das automatisiert ein PDF einliest, die Bilder extrahiert, diese per OCR auswertet und das PDF am Ende wieder zusammensetzt.
Cuneiform kann schon seit geraumer Zeit nicht mehr vernünftig mit dem hocr-Format umgehen. Die Texterkennung funktioniert zwar, aber die Positionierung scheitert im PDF. Seit Ubuntu 14.04 unterstützt dafür tesseract-ocr Sandwich-PDFs direkt, was eine deutliche Erleichterung ist. Aus diesem Grund verwende ich tesseract-ocr.
Zur Vorbereitung sind zunächst einmal folgende Pakete zu installieren:
1 |
sudo apt-get install pdftk poppler-utils tesseract-ocr tesseract-ocr-deu |
Daraufhin kann man folgende Datei als Skript erstellen (Name sandy.sh):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#/bin/bash if [ $# -eq 0 ] then echo "PDF-Datei als ersten Parameter erwartet" exit 1 fi echo "Lese: $1" # Basisnamen für später merken pdfbase=$(basename "$1" .pdf) # Extrahiere Bilder aus PDF pdfimages "$1" temp # Lese Bilder einzeln und wende OCR an for image in temp-*.pbm do base=$(basename "$image" .pbm) echo "OCR auf $base" tesseract -l deu "$image" "${base}" pdf done # Fasse einzelne PDFs wieder zusammen echo "PDFs zusammenfassen" pdftk temp-*.pdf output "${pdfbase}_sandy.pdf" # Lösche temporäre Dateien echo "Aufräumen..." rm temp-*.pdf temp-*.pbm echo "Fertig!" |
Per chmod +x sandy.sh muss die Datei ausführbar gemacht werden.
Danach kann man eine PDF-Datei, die aus Bildseiten aufgebaut ist, bequem in ein Sandwich umwandeln:
1 |
./sandy.sh MeinePDFDatei.pdf |
Es dauert ein wenig, dann sollte man eine Datei MeinePDFDatei_sandy.pdf vorliegen haben.
Das Skript ist im Moment noch ein Schnellschuss. Verbesserungen sind hier durchaus möglich, z.B. das Speichern im tmp-Ordner oder die Möglichkeit, eine andere Sprache als Deutsch einzustellen. Ich hoffe aber, das das Skript als einfache Hilfe bereits jetzt nutzbar ist.
Pingback: AUXNET » Cuneiform und hocr2pdf unter Ubuntu/Linux installieren und einsetzen
Pingback: AUXNET » Automatisches Skript für Cuneiform und hocr2pdf
varadi
Es sind temp-*.ppm – Dateien.
mkalus Autor
Das kann sein – je nach Ausgangsformat in den PDF-Dateien. In dem Fall muss man die Vorkommen von pbm durch ppm ersetzen.
Johannes
Ich mochte dieses Skript so sehr, dass ich mir eine eigene Version (mein erstes…) daraus geschrieben habe. Vielen Dank dafür!
Sie benutzt imagemagick und wahlweise unpaper oder scantailor, um die Dokumente zu optimieren. Außerdem speichert sie die temp-Dateien in /tmp/sandy. Optionen sind:
-r: rechtsdrehung,
-l: linksdrehung,
-f: 180-Graddrehung vor Verarbeitung:
-d: Layout Doppelseite,
-s: Layout Einzelseite.
-t: ScanTailor statt unpaper verwenden (funktioniert noch nicht so gut)
Zusätzlich installiert müssen zu den vorher genannten, um alle Funktionen zu erledigen, imagemagick, unpaper, scantailor:
sudo apt-get install imagemagick imagemagick-doc unpaper libtiff-tools netpbm scantailor
Leider weiß ich nicht, wie hier code Formatiert wird, also angehängt:
mkalus Autor
Hallo Johannes,
danke für die Erweiterung. Ich habe deinen Kommentar so angepasst, dass dein Code schön angezeigt wird. Ich schaue mir das bei Gelegenheit mal genauer an.
Zur Optimierung nehme ich öfters auch mal Ghostscript. Für Scans eignet sich ganz gut:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET \
-dBATCH -sOutputFile=output.pdf input.pdf
Falls die Qualität zu schlecht wird, kann ggf. statt ebook die Option prepress helfen.