Discussion:
Pdf auf Text überprüfen
(zu alt für eine Antwort)
Peter Blancke
2024-10-21 07:46:04 UTC
Permalink
Guten Tag,

ich habe hier (aktuelles Archlinux) eine Menge (> 500K) PDF per OCR
(ocrmypdf/tesseract) zu behandeln, allerdings nur dann, wenn die
PDF-Files nicht ohnehin schon indizierbaren Text enthalten.

Die anschließende Indizierung zu Zwecken der Durchsuchbarkeit
erfolgt wahlweise durch recollindex bzw. DocFetcher.

Nun kann ocrmypdf/tesseract dieses bereits von Haus aus und
überspringt solche PDF, die bereits indizierbaren Text enthalten.
Der Vorgang dauert aber sehr lange.

Zur Zeit löse ich in Bash das Problem mit folgender Schleife, die
ich um ocrmypdf herumbastele:

,----
| for i in *pdf; do
| test 0 -eq $(pdftotext "$i" - | wc -l) && ocrmypdf...
| done
`----

Auch das kostet Zeit, aber deutlich weniger.

Hat jemand noch eine andere bessere Idee?

Gruß,

Peter Blancke
--
Hoc est enim verbum meum!
Ralph Aichinger
2024-10-21 08:01:39 UTC
Permalink
Post by Peter Blancke
| for i in *pdf; do
| test 0 -eq $(pdftotext "$i" - | wc -l) && ocrmypdf...
| done
`----
Auch das kostet Zeit, aber deutlich weniger.
Ich nehme an, die Zeit geht beim pdftotext verloren?

Eventuell kann man über die Metadaten schneller herausfinden,
ob die PDFs schon Text hinterlegt haben, z.B. wenn es aus Programm
XY stammt (was man z.B. per pdfinfo sieht), dann kann man sich das pdftotext
ersparen, weil man weiß dass da sowieso was drin/sowieso nix drin ist,
also eine zweite Bedingung rund um das ocrympdf, die auf einen oder eine
kleine Liste von "Producer"-Einträgen per pdfinfo (oder ähnlich)
abfragt? Ob es sich auszahlt? Keine Ahnung, hängt wahrscheinlich von der
Länge/Filegröße der Dokumente ab.

Das bietet sich vor allem an, wenn ein Großteil der Dokumente aus einer
einzelnen Quelle stammen (z.B. einem Kopierer mit eingebautem Scanner),
weniger wenn es ein Sammelsurium von eingesammelten PDFs aus allen
möglichen Quellen ist.

/ralph
Peter Blancke
2024-10-21 08:51:18 UTC
Permalink
Post by Ralph Aichinger
Post by Peter Blancke
| for i in *pdf; do
| test 0 -eq $(pdftotext "$i" - | wc -l) && ocrmypdf...
| done
`----
Auch das kostet Zeit, aber deutlich weniger.
Ich nehme an, die Zeit geht beim pdftotext verloren?
Ja, exakt.
Post by Ralph Aichinger
Eventuell kann man über die Metadaten schneller herausfinden, ob
die PDFs schon Text hinterlegt haben,
Leider nein, die auftauchenden Werte sind NICHT aussagekräftig
genug, ich habe es jetzt mal mit wahllos 50 PDF probiert. Es ist
nicht zuverlässig.
Post by Ralph Aichinger
z.B. wenn es aus Programm XY stammt (was man z.B. per pdfinfo
sieht),
Ja, das sieht man. Aber die Quellen sind viel zu unterschiedlich und
mitunter derart "ungebräuchlich", daß mir dass zu unzuverlässig ist.

Ich lasse jetzt die Sache wie oben angegeben brutal durch pdftotext
durchlaufen, vermutlich ist das Zeitverhältnis von pdftotext zu
ocrmypdf ohnehin zu vernachlässigen. Dumm nur, wenn 999.999 PDF
bereits Text enthalten und 1 PDF keinen, dann hätte man viel Strom
verbraucht.

Danke für's Mitdenken.

Gruß,

Peter Blancke
--
Hoc est enim verbum meum!
Loading...