Data Scraping von PDF

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
Accounting_Research
User
Beiträge: 4
Registriert: Dienstag 18. November 2014, 17:43

Hallo Community,

z. Z. sitze ich an einer kleinen Projektidee und hoffe ich kann hier von den Erfahrungen einiger User profitieren. Zur Idee:

Ich möchte aus einer großen Menge PDF Dateien diejenigen herausfiltern, die eine nähere Betrachtung erfordern. Dazu sollen die PDF-Dateien mit einer Keyword-Liste abgeglichen und eine Häufigkeitsübersicht erstellt werden (Ausgabe am besten in Excel für weitere Filter etc.). Nun habe ich durch etwas Recherche herausgefunden, dass das PDF-Dateihandling offenbar nicht ganz unproblematisch zu sein scheint.

Hieraus ergibt sich meine erste Frage: Welche Bibliothek ist am besten geeignet, um den PDF-Dateizugriff zu realisieren. Die häufig verwendete Variante die PDF erst in Text umzuwandeln, erscheint mir hier ungeeignet, da es sich um eine große Anzahl Dateien (> 300 Dateien), welche zudem relativ groß sind (alle zwischen 3-30 MB).

Für jegliche nützlichen Hinweise wäre ich sehr dankbar.

Mit besten Grüßen
BlackJack

@Accounting_Research: Ob man den Text aus dem PDFs in einem Schritt vor der Suche macht, oder erst wenn man die Suche durchführt macht eigentlich kaum einen Unterschied. Die reinen Textdaten sind sehr wahrscheinlich auch deutlich kleiner als die PDFs, also sollte da weder die Anzahl noch die Dateigrösse einzelner PDFs eine grosse Rolle spielen.

Wenn man das extrahieren des Textes trotzdem in Python und ”live” machen möchte, könnte man zum Beispiel die Python-Anbindung an `libpoppler` verwenden.
Accounting_Research
User
Beiträge: 4
Registriert: Dienstag 18. November 2014, 17:43

Vielen Dank für dein Feedback. Mein Gedankengang war der, dass eine Suche in der PDF "in live" weniger Zeit braucht als wenn man zuerst die PDF komplett in Text umwandeln lässt. Das könnte zudem problematisch sein, weil die zu untersuchenden PDF Dateien komplexe Dokumente (Geschäftsberichte von Unternehmen) sind, die diverse Gestaltungselemente enthalten können. Ich kenne mich leider auch zu wenig mit dem PDF-Standard aus, um zu prognostizieren inwiefern dies die Textkonvertierung negativ beeinflusst.
BlackJack

@Accounting_Research: Wenn Du nach Texten in den PDFs suchst, dann musst Du den Text daraus extrahieren. Warum sollte der Zeitpunkt wann das gemacht wird einen signifikanten Unterschied auf die Geschwindigkeit haben?

Auch das mit den Gestaltungselementen wird so oder so zu einem Problem. Falls da Tabellen enthalten sind, kann es zum Beispiel problematisch werden die Texte darin zu extrahieren und zu Zellen zuzuordnen, denn solche Informationen sind in PDFs nicht mehr enthalten. PDF-Seiten sind letztendlich nur Vektorgrafiken, also eine Abfolge von Zeichenbefehlen a la: Male eine Linie auf die Seite von Punk a nach Punkt b oder zeichne eine Zeichenkette oder einen Buchstaben ab Punkt c auf die Seite. Ob die Linie zu einer Grafik gehört, eine Untersteichung einer Überschrift ist, eine Trennlinie um Fussnoten vom Text zu trennen, oder eine Linie die zu einer Umrandung einer Tabellenzelle gehört, ist als Information nicht im PDF enthalten. Genau so wenig ist die Reihenfolge festgelegt in der zum Beispiel eine Tabelle gezeichnet und mit Text versehen wird.
Accounting_Research
User
Beiträge: 4
Registriert: Dienstag 18. November 2014, 17:43

@BlackJack: möchtest du mir damit sagen, dass mein Plan durchaus größere Probleme bereithält? Ich hatte gehofft, dass es recht simpel sein würde eine solche Routine zu erstellen. Ich möchte ja nicht mehr, als eine Übersicht wie häufig gewisse "Keywords" in einer umfangreichen Sammlung von PDF-Dokumenten (zugeordnet je Datei) vorkommt. Nur so kann ich entscheiden, welche Dateien ich mir genauer ansehen sollte. Wenn die verfügbaren PDF-Bibliotheken keine eigene Suchfunktion liefern, könnte es dann vielleicht über eine Steuerung der Adobe Reader App funktionieren?
BlackJack

@Accounting_Research: Wenn es nur um Schlüsselworte geht, dann ist die Anordung im Dokument ja nahezu egal. Um den Text zu durchsuchen muss man ihn aus dem Dokument extrahieren. Nichts anderes macht ein PDF-Viewer wenn man die Suchfunktion benutzt. Und wie gesagt, *wann* man das macht ist eigentlich egal. Man kann das vorher machen und die Texte in Dateien speichern die man dann durchsucht, oder man kann das mit der Suche kombinieren in dem man zum Beispiel ein externes Programm wie `pdftotext` (poppler-utils oder xpdf) aufruft und den Text den das ausgibt im aufrufenden Python-Programm verarbeitet. Das ist wahrscheinlich eine der einfacheren Alternativen.
Accounting_Research
User
Beiträge: 4
Registriert: Dienstag 18. November 2014, 17:43

Vielen Dank für deine Unterstützung. Am besten ich teste das ganze mal... Allerdings habe ich noch Bedenken was die Laufzeit angeht. Hast du eine Idee, wie ich die in etwa schätzen kann (3-5 keywords bzw. Wortgruppen, 300 PDF Dateien a ca. 500 Seiten bzw. ca. 60 Seiten gekürzt)
BlackJack

@Accounting_Research: Also ich würde ja einfach erst mal die Texte extrahieren und in Textdateien schreiben. Grundsätzlich ist es ja wie gesagt egal wann man das macht wenn man es nur einmal macht, aber wenn man die Texte erst einmal extrahiert hat, kann man da leichter mit experimentieren und verschiedene Ansätze die weiter zu verarbeiten ausprobieren. Also ob man beispielsweise eine Datenstruktur aufbaut die Worte auf Dateinamen abbildet, ob die in den Speicher passt, oder ob man das in eine Datenbank steckt, und so weiter.
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Hallo,

ich hatte mich auch mal mit dem erstellen von PDF unter Python beschäftigt. Dabei habe ich natürlich etliche Seiten darüber und über PDFs allgemein gelesen.
Soweit ich mich da erinnern kann, enthält eine PDF-Datei mehrere "Schichten", wo jeweils Text, Grafiken usw gespeichert werden. Sucht man ein Wort in einer PDF-Datei, so wird in der Textschicht nach dem Wort gesucht. Bei gescannten PDFs muss diese erst mittels ORC erzeugt werden. Wird eine PDF aus Programmen wie zB LibreOffice, FreePDF usw erzeugt, so wird Textschicht automatisch angelegt.
Entsprechende Werkzeuge wie PDFtoText, libpoppler werden sich wohl diese Textschicht ganz einfach zu Nutze machen.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Im Hinblick auf die Frage, ob die Wörter A, B, C, D und E in einem Dokument enthalten sind (sprich: viele Suchanfragen für den selben Text), kann es möglicherweise von Vorteil sein, wenn man den extrahierten Text einmal in ein Set abspeichert und die Suchanfragen anschließend nur noch auf dieses Set macht. Das Erstellen des Sets benötigt zwar eine gewisse Zeit, aber spätere Wortabfragen können deutlich schneller sein im Gegensatz zur Wortsuche in einem einzelnen langen String.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@bfm: es gibt bei PDF keine Text-Schicht. Wie BlackJack schon geschrieben hat, ist das nur eine Ansammlung von Zeichenbefehlen. Z.B. werden oft gar keine Leerzeichen geschrieben, so dass es einiger mehr oder minder zuverlässiger Heuristiken bedarf, um Text in Wörter zu trennen. Apropos Trennen: Wörter die durch ein Zeilenende getrennt wurden, muß man bei der Strichwortsuche auch irgendwie berücksichtigen.
Antworten