Texterkennung vebessern mit Wortlisten?

Ich muß ein bisschen ausholen:

Seit längerem entwickle und nutze ich ein Tool auf Basis OCRmyPDF. Das Tool hat eine längere Gescichte und soll Schlagworte (speziell Namen, vesicherungsnummern) in texten erkennen und einer DB zuordnen.

Also so eine Art paperless aber nicht nur zum Kateorisieren und Archivieren von Dokuemnetn, sondern mit Anbindung an eine Datenbindung.

Was macht mein Tool? in erster Linie OCRmyPDF.

Danach Abgleich des erkannten textes mit Datensätzen aus einer 3rd-party-DB. ursprünglich war das eine Datenbank mit Gutachtenaufträgen, mittlerweile ist es eine Praxis-verwaltung.

Das problem ist aber immer dasselbe: Finde Namen, gebutrsdaten und Verwaltungsnummern (Aktenzeichen, versicherungsnummern) wieder und ordne die Dokumente zu.

Leider ist die Texterkennung von ocrmypdf und sekundär auch paperless nicht immer gut.

Mein Problem sind z.B. exotische Namen (und ich spreche nicht von Umlauten), aber auch Datumsangaben.

So werden gerne in eingehenden Faxen die Punkte im Datum vergessen/unterschlagen, also 29 05 1980 anstatt 29.05.1980.

Da würde ich genre ansetzen.

Mir fiele ein, aus der Patiententabelle eine Wortliste zu erstellen und diese an ocrmypdf (über paperless) zu füttern.

Hat jemadn mit sowas Erfahrungen? Bringt das überhaupt was? Und wie würde man eine solche Liste an Paperless übergeben?

Ich antworte mir mal selber:

Ich nutze das Feature “Wortlisten” jetzt nur wenige Tage. Ohne ein eindeutiges Ergebnis nennen zu können, würde ich diese Massnahme ale verbesserung bezeichnen. Ich habe die Tage keine einzige Fehlzurodnung gehabt.

Mit “SELECT DISTINCT NACHNAME …. UNION SELECT DISTINCT VORNAME ….”

erzeuge ich eine Liste mit Namen (aktuell ca. 49000 Zeilen) und speichere die in einer Datei.

Innerhalb paperless /Konfiguration/OCR-Einstellungen übergebe ich diese Datei

{"user_words": "/opt/scripts/words.txt"}

Das verzeichnis muss über die docker.yml erreichbar gemacht werden.

Paperless nutzt ocrmypDF nutzt Tessseract

Hallo @drnicolas ,
verstehe ich dich richtig? Dein Workflow sieht so aus:

  1. Dokumente in Paperless hochladen (manuell oder automatisiert)

  2. dein Tool extrahiert Daten (Name, Geburtsdatum, etc.)

  3. Daten werden in Datenbank(en) gespeichert → weitere Tools/Prozesse nutzen diese Daten

Falls ja, hier mein Vorschlag (genau so mache ich es selbst):

Lokale KI als Game-Changer einsetzen

  • Präzisere Textextraktion als regelbasierte Ansätze

  • Automatische Strukturierung/Ordnung der Daten

  • Direkte Datenbank-Integration möglich - z. B. noch mit n8n

Ressourcen für dich:

Hilft dir das weiter? Oder habe ich deinen Workflow falsch verstanden?

Viele Grüße

Danke. Die lokale KI-Geschichte könnte interessant sein/werden, wenn ich auch die Beiträge zu diesem Thema aktuell kaum verstehe.

Seit 3 Jahren wird bei mir ein Tool entwickelt und verwendet, das basierend auf ocrmypdf Scans und Faxe untersucht und ggf. Patienten aus meinem Praxisverwaltungsprogramm automatisiert zuordnet.

Solche Module gibt es schon, aber m.W. ohne automatische zuordnung. Ein befreundeter Allgemeinmediziner betreibt einen kompletten Arbeitsplatz mit dem Scannen/Zuordnen von allen möglichen papieren.

mein Tool macht folgendes:

  1. OCRmyPDF und Erzeiugung einer textdatei
  2. Durchsuchen des textes mit regex nach …
    1. Versicherungsnummern
    2. interener Patienten-ID
  3. Anschliessend ermitteln des zugehörigen Patienten aus der DB
  4. falls das nichts wird (meist fehlen diese Angaben auf externen Dokumenten), dann brute-force Suche nach name, Vorname, Geburtsdatum
  5. Falls die Identfikation erfolgreich war, kopieren des Dokumentes in ein Verzeichnis und Anlegen eines Eintrags in der Akte des Patienten
  6. Falls nicht, EIntrag in eine Liste für spätere manuelle zuordnung

Das funktioniert erstaunlich gut wenn auch nicht perfekt.

paperless wurde eingebuncen um eine bessere Darbietung der Gesamtheit an Dokumenten zu bieten.

  • übersichtlicher Eingangskorb#
  • komfortablere Suche auch nach anderen Merkmalen

Speziell der Reiter “Inhalt” offenbart jetzt die Macken.

Vorher hatten die MA bei der manuellen Zuordnung nur die grafische Dratsellung des Dokumentes zur verfügung ohne eine Idee WARUM es geklemmt hat.

Mit dem Inhaltsreiter sieht man jetzt durchaus die Probleme. Und wie immer steckt die Tücke im Detail:

  • Manchmal werden innerhalb eines Namens Leerstellen eingefügt. Aus “Kadrye” wurde z.B. “Kad rye”. gern passiert das wenn 2 schmale Buchstaben nebeneinander stehen
  • bei den versicherunsgnummern werden aus 0 gerne mal ein O (Oskar) oder umgekehrt
  • die Computer-0 (durchgestrichene 0) wird schonmal zu S oder 8 umgedeutet
  • und der Klopper: wir bedrucken wie viele andere immer noch bestimmte Formulare mit einem Nadeldrucker. Der hat aktuell ein schlechtes Farbbband. Folge: der Text fehlt im Inhalt VÖLLIG! Im grafischen Dokument aber problemlos erkennbar.
  • Und D E R Killer: Manchmal wird der Name gesperrt geschrieben

Aktuell wurde mir empfohlen doch mal von Graustufen-Scan auf Schwarz-weiss umzustellen. Das scheint grundsätzlich einiges verbessert zu haben.

Außerdem versuche ich Tesseract als Engine durch Wortlisten bestehend aus den Nachnamen und Vornamen zu unterstützen. Ergebnis: so lala.

Du siehst: die meisten Probleme dürften mit dem Scan an sich, respektive der Texterkennung zu tun haben.

insgesamt bietet der Umstieg auf paperless für diesen Vorgang aber erhebliche Vorteile in der Dratsellung/Verwaltung besonders der nicht zugeordneten Dokumente

Hi @drnicolas,
danke für dein Feedback.
Was würdest du von folgendem Vorschlag halten:

  1. Dokumente werden gescannt bzw. hochgeladen
  2. Verarbeitung erfolgt von deinem Programm, das du schon länger im Einsatz hast
  3. Via API oder einer anderen Möglichkeit (z. B. n8n) werden die Dokumente samt Inhalte an Paperless übergeben
  4. Deine MA, Kunden etc, die auf die Dokumente zugreifen können machen das über Paperless

Ggfs. kannst du den Sync auch wieder rückwärts fahren, das z. B. Änderungen an kundenspezifischen Attributen zurück zu deiner Software gespielt werden.

Dann hättest du praktisch, ohne gleich eine eigene KI einzuführen beide Vorteile kombiniert, oder?