PDF auslesen wie dargestellt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Krumnix
User
Beiträge: 12
Registriert: Mittwoch 11. Juli 2018, 09:44

Hallo zusammen,

ich möchte ein PDF auslesen. Das funktioniert einfach und läuft. Aber nicht so, wie ich es erwarte, bzw. brauche.
Kurze Erklärung:
Das PDF wird von einem CAD-Tool erstellt. In diesem PDF sind Daten auf den unterschiedlichen Seiten verteilt.
Diese Daten sollen von meinem Tool ausgelesen werden.
Den Sinn oder Grund dahinter ist erstmal egal.

Wenn ich mit den gängigen PDF-Library's in Python das mache, erhalte ich zwar den ganze Text-Inhalt, jedoch komplett unsortiert oder garnicht.
Das bedeutet, dass Texte, welche in der Darstellung in einer Linie sind, sind in Python dann im Ergebnis total verteilt.

Beispiel:
Anzeige im Adobe Reader:
ABC - Kernelement - BstNr.: 4807 4711 KK - Kunde - Zch-Nr.: XYZ 23
Ausgelesen mit py2PDF oder fitz:
Kernelement
-
4807
Kunde
-
-
Zch-Nr.:
XYZ
23
ABC
4711
Kernelement
-
BstNr.:

Problem dabei ist, dass die nächste Zeile in der Sortierung komplett anders sein kann. Ich hab da null Chance was sinnvolles zu finden.

Wenn ich jetzt aber die komplette Seite markiere (STRG+A) und kopiere (STRG+C) und im Editor einfüge (STRG+V) dann ist die Zeile komplett dargestellt.

Jetzt könnte ich 80er Like das PDF öffnen, jede Seite mit Tastatur-Simulation anspringen, den Text damit markieren, kopieren und den Zwischenspeicher auslesen,
aber das ist ja nicht sinnvoll.

Hat jemand einen Tipp, eine Idee oder sonstiges, wie ich die Daten so erhalte, als wenn ich die Seite markiere und kopiere?

Danke
Benutzeravatar
sparrow
User
Beiträge: 4529
Registriert: Freitag 17. April 2009, 10:28

Die kurze Antwort: PDF ist das falsche Format.

Die lange Antwort: Im Groben ist PDF ein Format, dass Seiten für den Druck beschreibt. Das von dir beschriebeme Verhalten ist zu erwarten. Dem Drucker ist es egal, ob der Text für Menschen interpretierbar im Dokument enthalten ist. Erst das Druck- oder das Tool zur Ansicht nimmt die Interpretation des Inhaltes vor.
Man umgeht das Problem, indem man vernünftige Austauschformate verwendet und nicht ein Druckformat benutzt. Oder dort zumindest die erforderlichen Daten in die Meta-Daten schreibt, die dann einfach und Konsistent zu extrahieren sind.

Ansonsten bleibt nur Rumprobieren, ob eines der Textextraktionstools aus PDFs die Positionen im Dokument besser zusammenstückelt. Hoffnung mache ich dir da keine.
Krumnix
User
Beiträge: 12
Registriert: Mittwoch 11. Juli 2018, 09:44

Ja, ich weiß, dass PDF keine guten Datenquelle ist. Hab ich ja geschrieben, soll nicht bewertet werden bei der Antwort.

Wenn ich es mit simulierten Tastenbefehlen mache, dann "funktioniert" es immer. Sprich, es ist egal, wie das PDF erstellt wurde, da die Darstellung immer gleich ist, und somit das kopieren der Textes das gleiche Format hat. Aber dadurch dauert es halt ewig (ca. 1s pro PDF-Seite).

Wenn jemand noch eine Idee hat, wie man das zusammenkonstruieren kann, wie es ein Reader macht und dann auslesen wie mit dem Markieren, ohne diese Spielerei, würde ich mich freuen.

Ansonst muss man erstmal so damit leben
Benutzeravatar
noisefloor
User
Beiträge: 4175
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

nochmal zum Verständnis: ein PDF vereinfacht erklärt so aufgebaut, dass im PDF Koordinaten stehen und den Koordinaten Text (oder ein Bild oder was auch immer) zugeteilt ist. Text kann ein Satz oder Absatz sein oder halt nur ein Wort. Darum ist es auch egal, ob im PDF Text, der nach menschlicher Sichtweise am Anfang steht (also i.d.R. links oben) am Anfang des PDFs hinterlegt ist oder am Ende oder mitten drin. Wenn du Text aus einem PDF extrahierst, dann wird das PDF i.d.R. intern sequentiell durchlaufen und der Text extrahiert. Dabei gehen die Positionsangaben verloren. Was in deinem Problem resultiert.

Mir ist kein Tool bekannt, dass die Positionsangaben "behält" und den Text richtig anordnet. Was nicht heißt, dass es keins gibt oder man sich das nicht low-level selber bauen könnten. Wie genau die Mechanismen des Betriebssystems sind, wenn du STRG+A und dann STRG+C und STRG+V drückst -> keine Ahnung.

Was eventuelle noch ein Ansatz wäre, wäre Texterkennung im PDF via OCR und dann so den Text extrahieren. Dann sollte die Reihenfolge stimmen.

Gruß, noisefloor
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Man kann anhand der Position des Textes versuchen, den richtig hin zu sortieren. Kann funktionieren, gibt aber keine Garantie. Und kann für ein PDF funktionieren und beim nächsten aus der selben Quelle nicht mehr.
Hier ist alles schön erklärt: https://pypdf.readthedocs.io/en/stable/ ... -text.html
Antworten