Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Daten aus pdf auslesen und weiter verarbeiten

Daten aus pdf auslesen und weiter verarbeiten

killerspots04.02.2321:54
Moin liebes Forum,
Ihr habt mir bisher immer gute Tipps gegeben.

Ich bin auf der Suche nach einer Möglichkeit, automatisiert oder ohne großen Aufwand Daten aus pdfs auszulesen und dann im weiteren Schritt in eine externe Datei, zB Excel zu schreiben.

Hintergrund sind meine TradeRepublic und andere Depot-Auszüge. Ich würde diese immer gleichen Daten gerne erfassen und in eine Excel-Datei schreiben. Ich habe bereits in Hazel für die automatisierte Benamung von Dateien für mein Paperless Office unzählige Regeln erstellt, die Daten ausliest und daraus Dateinamen schreibt.

Nun war zB ein Gedanke, ob man in Hazel vielleicht weitere Daten auslesen und in eine externe Datei schreiben könnte (zb sidecar-datei, csv, etc)
Dann würde ich „einfach“ diese Hazel-Regeln erweitern.

Alternativen sind natürlich noch lieber gesehen, die es mir noch flexibler machen und ich nicht durch unzählige Regeln gehen müsste.

Hat jemand Ideen, wie ich das bewerkstelligen könnte?

Tausend Dank.
-1

Kommentare

skid_KM04.02.2322:30
Vorschlag für einen ganz anderen Ansatz: Portfolio Performance kann PDF Dateien von vielen Depotanbietern parsen und so Depotbewegungen abbilden. Und tausend Kennzahlen dazu berechnen.

Hilft allerdings kaum, wenn man selbst an die Daten ranwill. Die PP Datenstrukur ist kompliziert.
+1
killerspots04.02.2322:32
skid_KM

ja hatte ich auch schon überlegt.
Aber wenn ich ne zufriedenstellende Lösung gefunden habe, könnte ich diese Technik auch gleich auf andere Bereiche anwenden.

Aber danke.
0
xcomma04.02.2322:45
Grundsätzlicher Ansatz könnte folgender Ablauf sein und dieses kann z.B. in Python gemacht werden (es finden sich aber mit Sicherheit für viele andere Sprachen ebenfalls vergleichbare Bibliotheken und Implementationsmöglichkeiten):
  • Textextraktion aus dem PDF (Annahme: generiertes PDF, kein OCR-tes PDF basierend auf einem Scan)
  • Sanitization sowie evtl. erste oberflächliche Validierungen
  • Ausgabe als CSV

Textextraktion
Verschiedene Bibliotheken werden hier z.B. gelistet:
Fast schon eine Step-by-Step Anleitung oder zumindest für den Aufbau eines ersten Grundgerüsts hier:

Sanitization & Validierungen
Die Textextraktion wird grundsätzlich alles an Text herausziehen. Da das Endprodukt vom Verständnis her tabellarische Daten diverser Finanzdaten sind bzw. wohl irgendwie weitergehend verarbeitet werden, macht es also Sinn überflüssige Texte zu entfernen oder anders herum nur die als für relevant erachteten Daten herauszufiltern.
Hier könnten dann auch diverse reguläre Ausdrücke zum Zuge kommen.
Da man evtl. nicht immer von 100% akkurater Textextraktion ausgehen kann, könnte man sich überlegen ein paar - wenn auch in dem Stadium noch sehr oberflächliche Validierungen einzubauen. Also ob Werte an Stelle X auch als Betrag erkannt wird, evtl. auch sehr grobe Plausibilitätschecks (also wenn z.B. das Depot einen Umfang von 100K hat, aber die Textextraktion etwas von 1Mio faselt usw.).

CSV
Schliesslich lässt sich eine CSV Datei rausschreiben, die mit jedem Tabellenkalkulationsprogramm in aller Regel eingelesen werden kann.

Zusatztipp: VisiData
Selber noch nicht eingesetzt, aber es sieht wirklich interessant aus.
Nicht nur könnte es rein schon nur für den CSV Output eingesetzt werden, in dem es z.B. Panda DataFrames (solltest du diese Konstrukte nehmen in den vorherigen Schritten) direkt übernimmt und als CSV ausspuckt, sondern auch für weitere Transformationen (und andere Gimmicks) angedacht werden.
+1
xcomma04.02.2323:27
killerspots
ob man in Hazel vielleicht weitere Daten auslesen und in eine externe Datei schreiben könnte (zb sidecar-datei, csv, etc)
Wie ich grad sehe, gibt's im Automator bereits eine "PDF-Text extrahieren" Funktion. D.h. du kannst Hazel eine Automator Aktion aufrufen lassen, die den ersten Teil erledigt und anschliessend ein weiteres Skript/Programm für die Schritte 2 + 3. Die eigentliche Handwerksarbeit liegt also hauptsächlich in der "für dich Sinn ergebenden Datenextraktion aus dem Rohtext".
+2
killerspots05.02.2310:58
Vielen Dank für die Ansätze.
xcomma
Textextraktion aus dem PDF (Annahme: generiertes PDF, kein OCR-tes PDF basierend auf einem Scan)
Sanitization sowie evtl. erste oberflächliche Validierungen

Kannst du mir genauer erläutern, warum die Annahme ausgeht von einem nicht-OCR-PDF? Was ist der Unterschied in den Abläufen, wenn es ein ocr-pdf wäre?

Phyton ist mir bisher leider nicht wirklich bekannt, steht aber noch auf meiner Bucketlist für die kommenden Monate/Jahre. Würdest du oder jemand denn auch einen anderen Ansatz sehen (vielleicht in Form eines Programms?), mit dem man einfach und schnell Daten extrahieren könnte?
0
killerspots05.02.2310:59
xcomma
killerspots
ob man in Hazel vielleicht weitere Daten auslesen und in eine externe Datei schreiben könnte (zb sidecar-datei, csv, etc)
Wie ich grad sehe, gibt's im Automator bereits eine "PDF-Text extrahieren" Funktion. D.h. du kannst Hazel eine Automator Aktion aufrufen lassen, die den ersten Teil erledigt und anschliessend ein weiteres Skript/Programm für die Schritte 2 + 3. Die eigentliche Handwerksarbeit liegt also hauptsächlich in der "für dich Sinn ergebenden Datenextraktion aus dem Rohtext".

Ah, super Ansatz. Ich versuche mich mal daran, müsste auch mal tiefer in Automator einsteigen um zu schauen, wie man die extrahierten Daten direkt in Automator bereinigen und die notwendigen Daten dann in eine externe Datei schreibt.
0
killerspots05.02.2311:02
Gibt es denn ggf. über die oben stehenden Ideen hinaus Programme, mit denen man dies direkt bewerkstelligen könnte? Besonders in heutiger Zeit von AI kann ich mir nicht vorstellen, dass ein automatisiertes Auslesen von Daten aus Dokumenten noch so ein problem darstellt.

Und kennt jemand eine Möglichkeit, dass ich Daten, die ich mit Hazel aus Dokumenten extrahiere, entweder mit Hazel wieder in die Metadaten der Datei schreiben kann bzw. in externe Dateien, wie eine daneben liegende CSV Datei? Ist sowas in Hazel möglich?

Habt vielen Dank und einen schönen Sonntag
0
marm05.02.2311:21
Wir wissen nicht, wie die Dokumente aussehen und welche Struktur diese haben noch welche Informationen Du benötigst.
Liegen die Informationen nach der Konvertierung in Text zeilenweise vor? Dann kann Du mit ripgrep die passenden Zeilen suchen.
Sind es Rechnungen, dann hilft vielleicht das hier
Kann VisiData den Text nach der Konvertierung als Tabelle erkennen?
+1
killerspots05.02.2312:40
marm
Wir wissen nicht, wie die Dokumente aussehen und welche Struktur diese haben noch welche Informationen Du benötigst.
Liegen die Informationen nach der Konvertierung in Text zeilenweise vor? Dann kann Du mit ripgrep die passenden Zeilen suchen.
Sind es Rechnungen, dann hilft vielleicht das hier
Kann VisiData den Text nach der Konvertierung als Tabelle erkennen?

Das ist wohl wahr.
Ich habe im ersten Schritt über Automator einmal die Daten aus dem PDF extrahiert und in txt-Dateien schreiben lassen. Im Endeffekte ähneln sich die Exporte sehr stark, ich müsste aus den text-Dateien feste Strings heraussuchen und weiter geben, teilweise sind sie in der selben Zeilen-Range zu finden. In Hazel wüsste ich wie ich mir diese Dinge konkret suche und in Variablen speichern könnte.

zB.
- String ("ISIN: xxxxxxxxxx") in Zeile 10 oder 11
- Datum (DD.MM.YYYY) in Zeile 19 oder 20 zwischen den Strings "Datum" und "Ausführung"
- Anzahl ("x,xxxx Stk") in Zeile 13 oder 14
- Durchschnittskurs ("x,xx EUR") in Zeile 15 oder 16
- Betrag ("x,xx EUR") in Zeile 15 oder 16

Wenn ich einen Weg finde diese konkreten Daten zu extrahieren und in einen andere Datei zu überführen, dann bin ich schon mal ein ganzes Stück weiter. Alles andere bräuchte ich gar nicht aus den pdf/text-Dateien.

Ich müsste mich in die anderen Tools wie RipGrep oder VisiData erst einmal tiefer einarbeiten, habe dazu bisher absolut gar keine Erfahrung. Bin auch gerade auf Familienurlaub und habe nur Zeit zwischendurch während die Kleinen mal malen oder im Pool schwimmen, um mich damit auseinander zu setzen
Kann mich in den nächsten Tagen/Wochen aber hoffentlich näher mit den Dingen und Tools beschäftigen.
0
MikeMuc05.02.2313:15
Daten zu extrahiertest immer mit Problemen behaftet. Aber vielleicht gibt es die Daten auch direkt als XML oder so? Kontoauszüge kann man ja auch oft in diversen Formaten erhalten.
Es gibt sogar Standards zb für Rechnungen, wo alle relevanten Daten bereits als sauberes XML integriert sind. Die sind dann viel einfacher mit ner passenden Software auszuwerten
+1
marm05.02.2313:17
killerspots
zB.
- String ("ISIN: xxxxxxxxxx") in Zeile 10 oder 11
- Datum (DD.MM.YYYY) in Zeile 19 oder 20 zwischen den Strings "Datum" und "Ausführung"
- Anzahl ("x,xxxx Stk") in Zeile 13 oder 14
- Durchschnittskurs ("x,xx EUR") in Zeile 15 oder 16
- Betrag ("x,xx EUR") in Zeile 15 oder 16
Du suchst beispielsweise nach der ISIN, dann gibst Du
rg isin testdatei.txt -i 
ein und erhälst die Zeilennummer und den Text der Ergebniszeile. Das Ergebnis kannst Du dann innerhalb von Hazel weiterverarbeiten.
Anleitung:
+2
MrChad05.02.2313:52
Der Vollständigkeit halber, sowas wird hier öfter diskutiert, u.a. dort und dort
u.a. auch
MrChad

- PDFbox: https://pdfbox.apache.org/1.8/commandline.html
ExtractText
This application will extract all text from the given PDF document.


z.B. als HTML extrahieren und den ersten H-Tag rauslutschen.

- macPorts davon: https://ports.macports.org/port/pdfbox/
+1
Nebula
Nebula05.02.2322:18
Es gibt auch noch Poppler, das sich leicht per Homebrew installieren lässt.
„»Wir werden alle sterben« – Albert Einstein“
0
xcomma07.02.2308:34
killerspots
Kannst du mir genauer erläutern, warum die Annahme ausgeht von einem nicht-OCR-PDF? Was ist der Unterschied in den Abläufen, wenn es ein ocr-pdf wäre?
Zugegeben, etwas unglücklich ausgedrückt.
Wenn ein vorgelagertes "OCR-ing" stattfand, dann wäre der Ablauf mutmasslich gleich - aber bei einem maschinengeneriertem PDF kann man in aller Regel von korrekten Text-Daten ausgehen, während bei OCR-tem Text es durchaus Fehler geben kann und das auch nicht in so einem kleinem Rahmen, dass man das vernachlässigen könnte, sondern weitere Ablaufschritte höchstwahrscheinlich vorgesehen werden sollten.

Testhalber habe ich mal den Text von Kontoauszügen (generiertes PDF der Bank) mit dem Automator-Workflow extrahiert und mir das Ergebnis angesehen. Das ist schon ernüchternd. Die einzelnen Textbestandteile sind in sich selber zwar in Ordnung, aber die visuelle Tabelle im PDF ist im Text-Extrakt quasi "unstrukturiert". D.h. an verschiedenen Stellen erscheint die Reihenfolge chaotisch mit Mischungen aus Daten aus verschiedenen Zeilen, und insbesondere Spalten. D.h. - sofern sich ein "Muster" erkennen lässt, wäre es ein nicht unerheblicher Aufwand die Tabelle im Textformat anständig zu regenerieren.
In so einem Falle wäre es evtl. geschickter die Daten von der Online-Banking-Webseite zu scrapen aufgrund der eindeutigeren (DOM-)Zugriffsmöglichkeit und damit Zuordnung.
0
MrChad07.02.2309:36
xcomma
Die einzelnen Textbestandteile sind in sich selber zwar in Ordnung, aber die visuelle Tabelle im PDF ist im Text-Extrakt quasi "unstrukturiert".
Praktisch alle mir bekannten PDF-Converter leiden an dem Problem der umbrochenen Texte und dem Verlust der Tabellen-Anordnung, immer wieder gleich/ähnlich.
Die Ursache ist wohl die PDF-"Sprache" selbst, wo diese Info zwar visuell aufbereitet, aber nicht strukturiert enthalten ist.
xcomma
In so einem Falle wäre es evtl. geschickter die Daten von der Online-Banking-Webseite zu scrapen aufgrund der eindeutigeren (DOM-)Zugriffsmöglichkeit und damit Zuordnung.
Die mir bekannten Online-Banking-Sites bieten in der Regel auch CSV-Exporte o.ä. an. Damit erübrigt sich die ganze Rück-Konvertierungs-Fummelei, egal über welchen Weg.
0
xcomma07.02.2309:48
MrChad
CSV-Exporte o.ä. an. Damit erübrigt sich die ganze Rück-Konvertierungs-Fummelei, egal über welchen Weg.
Stimmt, wenn die Möglichkeit besteht Daten in einem praktischen Exportformat bereits von der Quelle ab so zu beziehen, ist das immer vorzuziehen.
0
killerspots07.02.2312:27
xcomma
MrChad
CSV-Exporte o.ä. an. Damit erübrigt sich die ganze Rück-Konvertierungs-Fummelei, egal über welchen Weg.
Stimmt, wenn die Möglichkeit besteht Daten in einem praktischen Exportformat bereits von der Quelle ab so zu beziehen, ist das immer vorzuziehen.

Moin, das ist bei der DKB auch möglich und kein problem. Muss für Excel hier nur einen Weg finden die Daten so anzuzeigen, wie ich sie mir vorstelle und wünsche.
Bei TradeRepublic gibt es diese Funktion nur leider nicht, da gibt es lediglich den Weg die Transaktionen als PDF Download und dann über den von mir geplanten Weg des automatisierten Auslesens und in eine Excel-Liste schreiben.

Wie auch oben schon geschrieben habe ich umfangreiche Hazel-Regeln für alle meine Wertpapiere gebaut, die aus den pdfs alle notwendigen Daten extrahieren und für einen Dateinamen nutzen. Wenn es einen Weg gäbe, die restlichen Daten mit Hazel in die Metadaten der Datei oder in eine externe csv.-Datei zu schreiben, dann wäre mir ja quasi schon geholfen
0
xcomma07.02.2312:51
killerspots
[..] Transaktionen als PDF [..] automatisierten Auslesens und in eine Excel-Liste schreiben.
Sofern die PDFs sich in ihrer Struktur nicht verändern, wovon evtl. zumindest über einen Zeitraum X auszugehen sein dürfte (ggf. passt der Finanzdienstleister so etwas auch mal hier und da über einen Zeitraum Y an; kann man ja nie ausschliessen), ist glaube die Integration mit Hazel letztendlich lediglich das Aufrufen eines wie auch immer gearteten Programms, beispielsweise einem Skript, welches eben die "Parse- und Zuordnungs-Logik" enthält um aus einem vermutlichen chaotisch anmutenden Text-Extrakt die a) gewünschten Daten in b) eine ordentliche Form zu bringen. Glaube um diesen Initial-Aufwand wirst du nicht herumkommen.
killerspots
in die Metadaten der Datei
Gemeint sind Metadaten-Felder definiert durch das PDF-Format?
0
killerspots08.02.2311:38
xcomma
killerspots
[..] Transaktionen als PDF [..] automatisierten Auslesens und in eine Excel-Liste schreiben.
Sofern die PDFs sich in ihrer Struktur nicht verändern, wovon evtl. zumindest über einen Zeitraum X auszugehen sein dürfte (ggf. passt der Finanzdienstleister so etwas auch mal hier und da über einen Zeitraum Y an; kann man ja nie ausschliessen), ist glaube die Integration mit Hazel letztendlich lediglich das Aufrufen eines wie auch immer gearteten Programms, beispielsweise einem Skript, welches eben die "Parse- und Zuordnungs-Logik" enthält um aus einem vermutlichen chaotisch anmutenden Text-Extrakt die a) gewünschten Daten in b) eine ordentliche Form zu bringen. Glaube um diesen Initial-Aufwand wirst du nicht herumkommen.

Damit hätte ich gar nicht das Problem, wenn es mir weiterhilft. Da stellt sich mir aber die Frage nach der Umsetzung des möglichen Skriptes. Wonach würde ich da suchen?

killerspots
in die Metadaten der Datei
Gemeint sind Metadaten-Felder definiert durch das PDF-Format?
War mein Gedanke, ja. Oder gäbe es auch andere Möglichkeiten?
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.