PDF: unbekannte Zahl neben Keyword finden

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
Koffein-Junkie
User
Beiträge: 6
Registriert: Sonntag 23. Juli 2023, 22:26

Hallo Welt,

ich möchte mit Python Geldbeträge aus einem PDF Dokument auslesen und in einer SQL-Datenbank speichern.

Von Sachverständigen bekomme ich Gutachten zu Verkehsunfällen mit allen benötigten Daten. Das Gutachten ist ein PDF Dokument und irgendwo im PDF Dokumnet findet man folgende Daten (zur Veranschaulichung hab ich die Daten aus 3 verschiedenen Gutachten rauskopiert):

Bild

Ich möchte jetzt die Reparaturkosten netto auslesen. Im Beispiel 1 "3.702,37", im Beispiel 2 "5.497,80" und im Beispiel 3 "6.989,97". Sonst nichts. Nur die Zahl soll in der Datenbank gespeichert werden.

Jetzt zu meinem Problem: Ich kann nach bestimmten Wörtern (Keywords) suchen. Die Suche nach "Reparaturkosten" bzw. "Reparaturkosten netto" bringt mir aber nichts. Ich möchte nicht ein bestimmtes Wort finden, sondern den €-Betrag rechts daneben.Der €-Betrag ist immer ein anderer. Es wäre Zufall, wenn in 2 Gutachten die selben Reparaturkosten vorkommen.

Mein Lösungsansatz:
1. Alle Gutachter nutzen als Wort entweder "Reparaturkosten" oder "Reparaturkosten netto".
2. Die von mir gesuchte Zahl steht immer rechts neben dem Wort.
3. Deshalb kann ich die gesamte Zeile in der das Keyword vorkommt einlesen und alles bis auf die kleinste Zahl löschen. Dann bliebe im Beispiel 1 "3.702,37", im Beispiel 2 "5.497,80" und im Beispiel 3 "6.989,97" übrig.

Mein Anliegen: Den oben beschriebenen Lösungsansatz bekomme ich nicht hin. Ich bin für jeden Tip dankbar.

Das PDF lade ich wie folgt:

import re
from pdfminer.high_level import extract_pages, extract_text


for page_layout in extract_pages("gutachten.pdf"):
for element in page_layout:
print(element)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist leider nicht trivial. Grund ist die völlige Unberechenbarkeit der PDFs. Die können Text in Form von netten strings enthalten. Oder einfach direkt gerenderte Glyphen. Die Ordnung der Texte kann halbwegs der Leserichtung entsprechen. Oder komplett verwürfelt sein.

Profis benutzen darum immer OCR. Und maschinelles lernen. Nicht umsonst ist es ein oder vielleicht zwei Anbieter, die hinter allen(!) automatischen Rechnungserkennungen da draußen stecken.

Ich bezweifele darum, dass du da weit kommst. Aber wenn du einen Anfang suchst: https://pyimagesearch.com/2021/11/15/te ... -accuracy/ - Adrian hat auch jede Menge andere Inhalte (und natürlich seinen Kurs, den ich mal gekauft habe, und mir sehr geholfen hat. Aber nicht billig ist).

Ggf ist es sinnvoller, ein halbautomatisches Verfahren zu bauen, bei dem ein Mensch den gesuchten Betrag anklickt, und die OCR Ergebnisse nur lokal ermittelt werden. Dann verringert der Aufwand sich ggf auf wenige Sekunden / Gutachten, und ist vielleicht(!) robuster gegen zb Tippfehler. Ist aber auch nicht ganz einfach.
Benutzeravatar
noisefloor
User
Beiträge: 3857
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

im gegebenen Fall kommt ja auch noch dazu, dass die Daten in allen drei Beispielen als Tabelle oder tabellenartig angeordnet sind. D.h. das Schlüsselwert steht zwar gedruckt neben dem Betrag - aber in der Tabelle in einer anderen Zelle (vermutlich zumindest). Und ob die Tabelle eine "echte" Tabelle ist oder ein Konstrukt aus positioniertem Text und Grafik (=Linien) sieht man dem PDF auch nicht an.

Bei uns in der Firma bekommen wir die allermeisten Eingangsrechnungen als PDF, die direkt in den digitalen Workflow der Rechnungsprüfung gehen. Das funktioniert genau so, wie __deets__ beschreibt: OCR und maschinelles Lernen. Wobei wir auch eine fertige Lösungen eines externen Dienstleister nehmen, die dann nur noch auf Rechnungen mit exotischem Layout ein bisschen trainiert werden musste.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich bin kein Fan der EU, aber die haben das Problem offensichtlich erkannt und einen Standard herausgebracht: https://www.e-rechnung-bund.de/untersch ... erechnung/

Jetzt ist nur die große Frage, nutzt das überhaupt irgendjemand? Bevor ich nach elektronischer Rechnung gesucht habe, kannte ich das gar nicht.

Jedenfalls ist PDF unberechenbar. Diese Dokumente sind dazu gedacht, sie anzuzeigen bzw. auszudrucken, aber sie sind nicht dazu geeignet, sie maschinell zu erkennen. Die notwendigen Schritte sind ja bereits genannt worden.

Vielleicht gibt es auch Dienstleister, die Papier-Rechnungen in eine strukturierte Form bringen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

Bei unseren Kunden in der Elektro-Branche (hauptsächlich Großhandel und Handwerk von 1-Mann-Betrieb bis weit über 1000 MA) wurde es bisher auf jeden Fall noch nie gefordert ;-). Einige unserer Kunden schreiben höchstens, dass sie auch Rechnungen über Edifact akzeptieren.

Von 2 großen Handwerksbetrieben weiß ich, dass sie X-Rechnung für die Rechnungsstellung an verschiedene Verwaltungen nutzen MÜSSEN.

Allerdings ist es ja schon fast ein Wunder, dass viele Betriebe Rechnungen als PDF akzeptieren. Wir haben immernoch einige Kunden, die auf die Rechnung per Post bestehen...und das sind keine Klein-Betriebe.
Koffein-Junkie
User
Beiträge: 6
Registriert: Sonntag 23. Juli 2023, 22:26

Vielen Dank für die Antworten.

Ich habe noch eine Verständnisfrage: Wenn die Gutachten als Worddokument vorlägen wäre es möglich?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Eher. Aber auch nicht garantiert. “Rechts von” ist visuell einfach, aber als Dokumentstruktur kann das alles mögliche sein. Tabelle, keine Tabelle, eingebettet in Formate aller Art, ggf. ein Formularfeld eines Serienbriefs, etc pp. Da müsste man erstmal eine Auswahl zur Verfügung haben, um das zu beurteilen.
Benutzeravatar
noisefloor
User
Beiträge: 3857
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Ergänzung zu __deets__: was bei Word möglich sein sollte ist, dass du dir pro Gutachter (davon ausgehend, dass die Rechnung von Gutachter $FOO immer identisch strukturiert sind) ein Programm zu schreiben, dass die die Daten raus zieht. Das ein Programm für alle drei funktioniert ist IMHO eher unwahrscheinlich.

Wenn du es die einfach machen willst, dann musst du halt ein Standardisiertes Format wie z.B. das genannten X-Rechnung vorgeben.

Plan B: du baust dir eine Webplattform, wo die Gutachter in einer von dir definierten Maske / von dir erstelltem Formular die Daten / Werte für das Gutachten eingeben können (müssen).

Gruß, noisefloor
Koffein-Junkie
User
Beiträge: 6
Registriert: Sonntag 23. Juli 2023, 22:26

Ok. Dann muss ich mir mal kommerzielle Produkte angucken und mir ein anderes Python Projekt ausdenken.
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Selbst bei kommerziellen Produkten sollte man keinesfalls davon ausgehen, dass die Erkennung vollkommen automatisiert funktioniert. Wir nutzen in der Buchhaltung unseres Betriebs die DATEV, was sicherlich keine unbekannte Software in dem Bereich ist. Und auch da müssen beim Buchen von Rechnungen oft genug leere Felder befüllt werden, weil die betreffenden Infos aus der vorliegenden Rechnung nicht bzw. nur zum Teil erkannt wurden.

Oder noch schlimmer: Mitunter sind auch Felder falsch befüllt, weil die DATEV kurioserweise manchmal Angaben von der vorherigen Buchung mit reinmischt, wenn sie bei der Erkennung nicht sicher war. Okay, das macht vielleicht andere Software nicht, aber ist schon "lustig", wenn einfach die Rechnungsnummer des Vorgängers drinsteht und man es vielleicht nicht immer mitkriegt.

Gerade bei so heiklen Themen, wie der Erfassung von Kosten, sollte immer nochmal ein Mensch drüber schauen. Sonst kann man damit gewaltig auf die Schnute fallen. Außer die Erfassung geschieht über eine klar definierte Schnittstelle. Du bekommst aber deinen Input offenbar über völlig verschieden gestaltete Schriftstücke (als Teil der Gutachten) - und da kann eine Menge schiefgehen.
Koffein-Junkie
User
Beiträge: 6
Registriert: Sonntag 23. Juli 2023, 22:26

snafu hat geschrieben: Mittwoch 26. Juli 2023, 20:28 Oder noch schlimmer: Mitunter sind auch Felder falsch befüllt, weil die DATEV kurioserweise manchmal Angaben von der vorherigen Buchung mit reinmischt, wenn sie bei der Erkennung nicht sicher war. Okay, das macht vielleicht andere Software nicht, aber ist schon "lustig", wenn einfach die Rechnungsnummer des Vorgängers drinsteht und man es vielleicht nicht immer mitkriegt.
Erstaunlich. Leider müssen wir automatisieren, weil der Arbeitsmarkt leergefegt ist. Wir würden gerne noch 3 Mitarbeiter einstellen, aber finden keine.
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bleibt halt abzuwägen, welche Kosten gegenüber welchem Nutzen entstehen. Zu 100% fehlerfrei wird es ganz sicher nicht. Wählt man die vielleicht nicht "ganz so tollen" Mitarbeiter oder die innerhalb von Wochen (evtl. auch Monaten) selbst erstellte Software? Sinnvoll kann es auch sein, wenn man die (Standard-)Software vorarbeiten lässt und der Mensch anschließend den Rest macht (quasi ein Hybrid-Modell). Das sind Kosten auf beiden Seiten, aber es kann effizienter und weniger fehleranfällig sein. Viel Spaß bei der Bewertung... ;)
Antworten