Inhalt einer PDF-Datei zu Textdatei, bzw Python-Modulchaos

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Kermit24
Beiträge: 277
Registriert: 29.04.2006 14:44:39

Inhalt einer PDF-Datei zu Textdatei, bzw Python-Modulchaos

Beitrag von Kermit24 » 03.03.2024 08:30:27

Hallo,

ich möchte gerne PDF-Dateien zu Text-Dateien wandeln.

Dazu nutze ich schon länger das python tool pdf2txt (pdfminer.six aus python3-pdfminer), was bei PDFs, welche durchsuchbaren Text enthalten, auch wunderbar funktioniert. Allerdings habe ich auch immer mal PDFs, wo die Seiten als Image enthalten sind. Diese müssten per OCR konvertiert werden. Jetzt habe ich zwar schon ein älteres Tool gefunden, dass das im Prinzip können soll, doch ich bekomme es einfach nicht zum Laufen unter Bookworm: https://github.com/annacprice/pdf-scraper

Dieses kleine Python-Script soll zuerst mit oben genannten Tool (pdfminer.six) versuchen den Text zu bekommen. Bekommt es damit nichts zurück, soll es mit tesseract OCR nutzen. Leider bekomme ich das tool nicht zum Laufen. Ihm fehlt offenbar das pytesseract Modul:

Code: Alles auswählen

Traceback (most recent call last):
  File "/tmp/pdff/./pdfscraper.py", line 9, in <module>
    import pytesseract
ModuleNotFoundError: No module named 'pytesseract'
Im bookworm repository konnte ich leider kein python3-pytesseract finden. Mit PIP kann ich es nicht installieren, da debian das tool ja kastriert hat. Mit pipx konnte ich pytesseract nach ~/.local/bin installieren. pytesseract als Befehl kann ich nun auch ausführen. pdfscrapter.py fehlt aber immer noch das module. Das installiert pipx wohl nicht. Ich habe auch versucht mit pipx direkt pdfscraper zu installieren. Das installiert jede Menge Zeug nach .local/bin, allerdings das pdfscraper-script selbst nicht:

Code: Alles auswählen


pipx install pdfscraper --include-deps
⚠️  Note: chardetect was already on your PATH at /usr/local/bin/chardetect
⚠️  Note: f2py was already on your PATH at /usr/bin/f2py
⚠️  Note: normalizer was already on your PATH at /usr/bin/normalizer
⚠️  File exists at /home/user/.local/bin/tabulate and points to
    /home/user/.local/bin/tabulate, not
    /home/user/.local/pipx/venvs/pdfscraper/bin/tabulate. Not modifying.
⚠️  File exists at /home/user/.local/bin/pytesseract and points to
    /home/user/.local/pipx/venvs/pytesseract/bin/pytesseract, not
    /home/user/.local/pipx/venvs/pdfscraper/bin/pytesseract. Not modifying.
  installed package pdfscraper 1.1.9, installed using Python 3.11.2
  These apps are now globally available
    - camelot
    - chardetect
    - distro
    - dumppdf.py
    - f2py
    - imageio_download_bin
    - imageio_remove_bin
    - lsm2bin
    - normalizer
    - pdf2txt.py
    - tiff2fsspec
    - tiffcomment
    - tifffile
    - pytesseract (symlink missing or pointing to unexpected location)
    - tabulate (symlink missing or pointing to unexpected location)
done! ✨ 🌟 ✨

Ich kenne mich leider nicht tief genug mit python aus, um das ans Laufen zu bringen. Kennt jemand ein anderes Tool, welches genau das macht und von der Kommandozeile (wegen Stapelverarbeitung) aus nutzbar ist?

Nachtrag: Ich habe gerade selber festgestellt, dass das pdfscraper tool von PIP(x) (ebenso pdf-scraper) mit dem oben verlinkten pdf-scraper nichts zu tun hat.


Danke im Voraus

Huo
Beiträge: 614
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: Inhalt einer PDF-Datei zu Textdatei, bzw Python-Modulchaos

Beitrag von Huo » 03.03.2024 12:18:14

Mit pdftoppm aus den Debianpoppler-utils lassen sich aus einer PDF-Datei Bilddateien (je PDF-Seite eine Bildatei!) erzeugen. Diese Bilddateien kann man wiederum einzeln mit tesseract zu Textdateien konvertieren. Dann müssen anschließend die Einzelseiten-Textdateien zu einer Textdatei zusammengefügt werden.

Um die einzelnen Schritte zu automatisieren, habe ich mal quick & dirty ein Bash-Skript pdfmytxt.sh geschrieben, das sich natürlich noch verbessern ließe. Verwendung:

Code: Alles auswählen

pdfmytxt.sh /Pfad/zur/datei.pdf
erzeugt Datei datei.txt. Hab das Skript gerade nur schnell erfolgreich mit einer mehrseitigen PDF-Datei getestet.

Das Skript:

Code: Alles auswählen

#!/bin/bash

# PDF-Dateiname ohne Dateierweiterung
name=$(echo $1 | sed 's#.*/##; s#[.][^.]*$##')

# Konvertierung der PDF-Datei in Bilddateien (je Seite)
pdftoppm -png "$1" "$name.pdf"

# Generierung der Text-Dateien (Einzelseiten)
for i in "$name".pdf-*.png; do tesseract "$i" "$i" -l deu; done

# Zusammensetzen der Einzelseiten zu einer Textdatei
cat "$name".pdf-*.png.txt > "$name".txt

# Löschen der Hilfsdateien
rm "$name"*-*.png*

Korodny
Beiträge: 705
Registriert: 09.09.2014 18:33:22
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Inhalt einer PDF-Datei zu Textdatei, bzw Python-Modulchaos

Beitrag von Korodny » 03.03.2024 16:09:13

Debianocrfeeder ist ein GUI-Tool, das OCR auf PDF-Dateien oder oder eine Serie von Bildern anwenden kann. Ich nutze inzwischen aber auch die Konsole, pdfimages ist Teil der Debianpoppler-utils und extrahiert wenn der Parameter -all angegeben wird, alle Bilder in ihrem Originalformat (JPEG, PNG...). danach gehe ich dann mit einem Bash-Skript über alle Textdateien drüber:

Code: Alles auswählen

for i in *.png;do tesseract $i $(basename $i .png) -l deu;done
cat *.txt >output.md
rm *.txt
Du solltest dich aber auf reichlich Nacharbeit einstellen: Seitenzahlen u.ä. müssen raus, die Erkennung bzw. Unterscheidung von "l", "i"", "|", "1" ist eher bescheiden (gilt auch für weitere Fälle wie "m" vs. "rn"...

Antworten