Die Eingangsdokumente (Brief, Fax oder Email) bei einem unserer Versicherungskunden werden mit Kofax Capture erfasst und durch Kofax Transformation Modules (KTM) klassifiziert und die gewünschten Geschäftsdaten werden dann ebenfalls mit KTM extrahiert.
Durch die frühzeitige Klassifizierung der Dokumente in KTM als Kündigung, kann die Versicherung zeitnah Aktionen starten, um den Kunden eventuell doch noch zu halten. Die dennoch verbleibenden durchzuführenden Kündigungsprozesse sollen dann möglichst automatisiert durchgeführt werden. Dazu musste mit KTM das im Schreiben angegebene Kündigungsdatum extrahiert werden, um damit die nachfolgenden Prozesse starten zu können.
Bei der Realisierung mit KTM Formatlokatoren und regulären Ausdrücken gab es Probleme mit der Datumsextraktion sobald Zeilenumbrüche innerhalb der zu suchenden Kündigungsformulierungen vorkamen. Im Folgenden wird erläutert wie wir diese Probleme mit KTM-Bordmitteln lösen konnten.
Bei Kündigungsschreiben existieren grundsätzlich zwei Arten, wie das Kündigungsdatum angegeben wird:
1. Explizite Angabe des Datums: … kündige ich zum 31.12.2016 meinen …
2. Indirekt Datumsangabe: … kündige ich den Vertrag zum nächstmöglichen Termin …
Beide Varianten kann man recht einfach mit KTM-Format-Lokatoren und regulären Ausdrücken verarbeiten.
1. Bei explizit angegebenem Datum kann man z.B. wie folgt vorgehen:
Der Lokator liefert dann, wie zu erwarten, das gewünschte Datum:
Werden allerdings die Worte aus den Evaluierungseinstellungen (zum, dem, usw.) vom eigentlichen Datum nicht durch Leerstellen, sondern durch einen Zeilenumbruch getrennt, versagt der Formatlokator:
Abhilfe schafft hier z.B. eine Kombination aus Formatlokatoren und einem Geometrieevaluator:
Ein Formatlokator sucht die Worte (zum, dem, usw.) am Zeilenende:
Das $-Zeichen sorgt dafür, dass nur die Worte an einem Zeilenende gefunden werden.
Ein weiterer Formatlokator sucht nur nach Datumsangaben, die zu Beginn einer Zeile stehen:
Das ^-Zeichen zu Beginn des regulären Ausdrucks sorgt dafür, dass nur Datumsangaben an einem Zeilenanfang gefunden werden.
Nun kann mit einem Geometrieevaluator nach allen Datumsangaben unterhalb des Wort-Formatlokators gesucht werden:
Anhand der entfernungsabhängigen Konfidenz kann man nun das Ergebnis des Geometrieevaluators akzeptieren.
Alternativ zum Geometrieevaluator könnte per Skript überprüft werden, ob das Resultat des Datums-Formatlokators eine Zeile unterhalb des Ergebnisses des Wortlokators liegt.
2. Bei den indirekten Datumsangaben bietet sich eine ähnliche Vorgehensweise an:
Liegt eine der indirekten Datumsangaben vor (zum nächstmöglichen Zeitpunkt, zum nächstmöglichen Termin, zum nächsten zulässigen Termin, usw.), war für die weitere Verarbeitung der Kündigung die Weitergabe eines Dummy-Datums gewünscht.
In diesen Fällen wird dann der 01.01.1970 weitergegeben.
Eine einfache Möglichkeit dies mit Formatlokatoren durchzuführen, wäre die folgende:
In der Praxis haben wir vom Fachbereich eine lange Liste mit möglichen Formulierungen bekommen. Der Umfang dieser Liste wird im weiteren Verlauf noch eine Rolle spielen.
Der Lokator liefert einen Treffer, sobald eine der Formulierungen im Dokument vorkommt:
Wird durch den Formatlokator eine der Formulierungen gefunden, muss das Datum per Skript nur noch auf den 01.01.1970 gesetzt werden.
Allerdings versagt auch hier der Formatlokator sobald die Worte einer der gesuchten Formulierungen durch einen Zeilenumbruch getrennt werden:
Aufgrund der Vielzahl der möglichen Wort-/Zeilenumbruchskombinationen ist hier keine einfache Lösung mit einem Geometrieevaluator möglich bzw. sinnvoll. Eine Lösungsmöglichkeit wäre die Suche nach den Formulierungen im von der OCR-Engine gelieferten Volltext des Dokuments.
Dabei wäre es natürlich vorteilhaft, wenn man im Skript die bereits im Formatlokator ‚DatumIndirekt‘ als RegEx definierten Formulierungen auslesen und benutzen könnte. Dadurch müssten die – in der Praxis sehr umfangreichen – Formulierungen nur in dem Formatlokator ‚DatumIndirekt‘ gepflegt werden.
Dazu muss das Skript zunächst einmal die im Formatlokator definierten Begriffe auslesen. Hierzu wird zunächst die zu KTM gehörende ‚Kofax Cascade Regular Expressions Locator‘-DLL in der Skript-Umgebung referenziert:
Im Skript können dann mit der folgenden Funktion die RegEx-Einträge (also die gewünschten Formulierungen) des Lokators ausgelesen und nach ihnen im OCR-Volltext gesucht werden:
1Function TermFound(ByVal pXDoc As CASCADELib.CscXDocument) As Boolean 2 3 'Returns True, if the terms from locator 'DatumIndirekt' are found within the OCR fulltext 4 5 Dim oLocator As CscRegExpLib.CscRegExpLocator 6 Dim i As Integer 7 Dim Terms() As String 8 Dim Fulltext As String 9 10 'Init Returncode with False 11 TermFound=False 12 13 'get Format Locator 'DatumIndirekt' 14 Set oLocator = Project.ClassByName("YourClass").Locators.ItemByName("DatumIndirekt").LocatorMethod 15 16 ReDim Terms(oLocator.RegularExpressions.Count-1) 17 18 'Put the RegEx-Expressions from Format Locator 'DatumIndirekt' into the array Terms() 19 For i=0 To oLocator.RegularExpressions.Count-1 20 Terms(i)= oLocator.RegularExpressions.ItemByIndex(i).RegularExpression 21 Next 22 23 'Now get the OCR fulltext from page 1 24 Fulltext=pXDoc.Pages.ItemByIndex(0).Text 25 26 'Remove empty spaces, CR and LF 27 Fulltext=Replace(Fulltext,Chr(9),"") 'Tab 28 Fulltext=Replace(Fulltext," ","") 'blank 29 Fulltext=Replace(Fulltext,Chr(13),"") 'CR 30 Fulltext=Replace(Fulltext,Chr(10),"") 'LF 31 '... 32 33 'Search for Terms() in Fulltext 34 For i=0 To oLocator.RegularExpressions.Count-1 35 If InStr(Fulltext,Terms(i))>0 Then 36 'Bingo! Return True 37 TermFound=True 38 Exit For 39 End If 40 Next 41 42End Function
Mit diesem Konstrukt muss man dann nur noch die Formulierungen im Lokator ‚DatumIndirekt‘ pflegen. Es werden dann alle Formulierungen sowohl mit als auch ohne ’störenden‘ Zeilenumbruch gefunden.
Will man die Formulierungen nicht direkt im Formatlokator pflegen, sondern eventuell in einer externen Textdatei, kann man eine ähnliche Technik verwenden, um die regulären Ausdrücke eines Formatlokators während der Laufzeit zu verändern. Siehe dazu:
Kofax Transformation Modules – Formatlokatoren und dynamische reguläre Ausdrücke
Kofax Transformation Modules – Formatlokatoren und dynamische reguläre Ausdrücke – Teil 2
Weitere Beiträge
von Jürgen Voss
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Jürgen Voss
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.