PDF Volltextsuche mit pypdfocr

0

Jeder kennt das Problem. Über das Jahr verteilt erhält man jede Menge Briefe. Einige davon wirft man sofort weg, einige muss man aufheben.
Mit der Zeit sammelt sich dann jede Menge Schriftverkehr, der langsam Ordnern für Ordner den Schrank füllt.

Ich scanne aus diesem Grund seit einiger Zeit alle Briefe ein und speichere sie als PDF. Der Vorteil ist, dass ich sie jederzeit einfach finden kann,
ohne Ordner durchblättern zu müssen, und eine Sicherung der Dateien einfach möglich ist. Was bisher immer gefehlt hat, war eine Volltextsuche
innerhalb der eingescannten Dokumente.

Dieses Problem kann man unter Zuhilfenahme des Tools pypdfocr jedoch auch lösen.

Pypdfocr ist ein Python Script, was unter Zuhilfenahme von tesseract-ocr die PDF Dateien in ein Bild umwandelt. Anschließend mittels Texterkennung
einen zweiten Layer in das PDF Dokument einfügt und das Dokument mit dem Suffix _ocr.pdf abspeichert. Die Original-Dokumente bleiben also unangetastet.

Pypdfocr kann über pip installiert werden. Neben python-pip müssen für tesseract-ocr noch das entpsrechende Sprachpaket sowie ein paar weitere Pakete installiert werden.

apt-get install python-pip
apt-get install tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng
apt-get install gcc libjpeg-dev minizip zlib1g-dev python-dev

Nach der Installation der Pakete empfiehlt es sich pip auf die letzte Version upzugraden:

pip install --upgrade pip

Anschließend kann pypdfocr installiert werden.

pip install pypdfocr

War die Installation erfolgreich, kann aus einem vorhandenen Dokument anschließend wie folgt eine OCR Version erstellt werden.

pypdfocr -l deu filename.pdf

Wer wie ich bereits jede Menge PDF Dokumente vorliegen hat, kann die Bearbeitung für alle Dokumente automatisieren.

find -name "*.pdf" -not -name "*_ocr.pdf" -not -path "*RECYCLE.BIN*" -exec pypdfocr -l deu {} \;

Beim Konvertierungsvorgang werden Bilder als auch _text.pdf Dateien erstelle. Bei wurden nicht alle  _text Dateien sauber gelöscht. Dies sollte man ggf. selber im Nachgang machen.
Aus Sicherheitsgründen würde ich den Parameter mtime mit verwenden. Dieser gibt nur Dateien zurück, welche im nachfolgenden Beispiel nicht älter sind als 24 Stunden.

find -mtime -1 -name "*_text.pdf" -exec rm {} \;

Wer nachschauen möchte, wie viel Festplattenspeicher die OCR-Dateien beanspruchen:

find -name "*_ocr.pdf" -print0 | du --files0-from=- -hc | tail -n1

Wer das ganze regelmäßig machen möchte, sollte vorher auf existierende OCR-Dateien prüfen, um nicht bei jedem Durchlauf alle Dateien neu zu bearbeiten.
Im nachfolgenden Beispiel wird daher geprüft, ob es für die aktuelle PDF-Datei bereits eine _ocr.pdf gibt. Wenn nicht, wird sie erstellt.

find -name "*.pdf" -not -name "*_ocr.pdf" -not -path "*RECYCLE.BIN*" -print0 | while IFS= read -r -d '' file; do
  if [ ! -f "$(echo $file | sed 's/\.pdf/\_ocr\.pdf/g')" ] ; then
    pypdfocr -l deu "$file"
  fi   
done

 

Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

Antworten