Kofax Transformation Modules – Formatlokatoren und dynamische reguläre Ausdrücke – Teil 2

Keine Kommentare

Teil 2: Dynamische reguläre Ausdrücke in KTM

Nachdem im ersten Teil dieses Blog-Artikels die Nutzung der Formatlokatoren mit regulären Ausdrücken beschrieben wurde, soll im Folgenden gezeigt werden, wie flexibel man durch die KTM-eigene Skripting-Sprache die Erkennung in KTM-Projekten gestalten kann. Allerdings sollte man sich dazu in der KTM-Skriptsprache und dem KTM-Objektmodell etwas auskennen.

Die in Teil 1 dieses Blogartikels beschriebenen Formatlokatoren sind – nachdem sie einmal definiert wurden – statische Ausdrücke. Man definiert sie einmal im KTM Project Builder und sie werden dann so in der Kofax Capture Verarbeitungskette genutzt.

Es gibt allerdings den – zugegebenermassen seltenen – Fall, dass man während der Laufzeit des Erkennungsprojekts den regulären Ausdruck eines Formatlokators aufgrund bestimmter Rahmenbedingungen ändern möchte. Das funktioniert ‚out of the box’ leider nicht. Man findet im reichhaltigen KTM-Baukasten allerdings eine Library, die diese Funktionalität ermöglicht.

Bei einem Erkennungsprojekt, das wir für einen Scan-Dienstleister im Finanzdienstleistungsbereich durchführten, stießen wir auf die Herausforderung das Projekt mandantenfähig aufsetzen zu müssen. In diesem Zusammenhang mussten Dokumenttypen verarbeitet werden, bei denen die beschriebenen ‘statischen’ Formatlokatoren nicht zum Ziel führten. Wir benötigten Formatlokatoren, deren reguläre Ausdrücke während der Laufzeit (abhängig von mandantenspezifischen Rahmendaten) modifiziert werden konnten. Dank der in KTM enthaltenen VB-ähnlichen Skriptsprache und Kenntnissen des KTM-Objektmodels konnten wir dies realisieren.

Ein zu verarbeitender Dokumententyp war bei allen Mandanten des Dienstleisters gleich aufgebaut. Der Unterschied bestand darin, dass ein bestimmter Text auf dem Dokument je Mandant verschieden war. Je nachdem ob dieser Text nun links oben oder rechts oben auf dem Dokumment aufgedruckt war, musste eine Kontonummer entweder aus einem Feld unten links oder unten rechts ausgelesen werden.

In einer Initialisierungsdatei wurde außerhalb von  KTM die Zuordnung von Mandant und zugehörigem Text hinterlegt:

100 ; Hamburg
110 ; Berlin
120 ; Bremen
:
:

Bei Bedarf kann diese Datei jederzeit unabhängig vom KTM-Projekt geändert oder erweitert werden. Die Mandantennummer (100, 110, 120, …) wird während der Laufzeit vom Scan-System Kofax Capture an das KTM-Projekt übergeben.

Im KTM-Projekt wurde unter anderem ein Formatlokator definiert, der herausfinden soll, ob der mandantenspezifische Text (Hamburg, Berlin, Bremen, …) oben links oder oben rechts steht. Der reguläre Ausdruck dieses Formatlokators wird nun während der Laufzeit des KTM-Projekts dynamisch mit dem zur Mandantennummer gehörenden Text (Hamburg, Berlin, Bremen, …) versehen. Auf diese Weise gelang es uns, dem Formatlokator während der Laufzeit, über die externe Initialisierungsdatei, den jeweils passenden regulären Ausdruck ‚einzubauen’.

Wie man den regulären Ausdruck eines Formatlokators während der Laufzeit eines Projekts per Skripting ändern kann, möchte ich wegen der Komplexität des oben beschriebenen Kundenprojekts im Folgenden am einfachen Beispiel der Versicherungsnummer aus dem ersten Teil dieses Blog-Artikels erläutern.

Zunächst muss man im Project Builder Skript (auf der passenden Dokumentenklasse) folgende Referenz setzen:

KTM-Referenz

Im ersten Teil dieses Artikels hatten wir den Format Lokator FL_VSNR mit dem regulären Ausdruck 20\d{2}/\d{1,10} benutzt:

KTM-FL-Formats75

Zur Änderung des regulären Ausdrucks während der Laufzeit muss ein Skriptlokator (im unteren Beispiel: SL_ChangeRE) VOR dem zu ändernden Formatlokator eingefügt werden. Der Skriptlokator muss vor dem Formatlokator stehen, damit er auch vor ihm ausgeführt wird. Er soll ja den regulären Ausdruck des Formatlokators verändern.

KTM-Scriptlocator

Der Skriptlokator SL_ChangeRE enthält folgendes Stück Scripting, welches den regulären Ausdruck des Formatlokators FL_VSNR auf den Wert 20\d{2}/\d{2} ändert:

' Class script: Dokumente
Private Sub SL_ChangeRE_LocateAlternatives(ByVal pXDoc As CASCADELib.CscXDocument, _
            ByVal pLocator As CASCADELib.CscXDocField)

Dim NewRegEx As String
Dim oLocator As CscRegExpLib.CscRegExpLocator

'get format Locator FL_VSNR
Set oLocator = Project.ClassByName("Dokumente").Locators.ItemByName("FL_VSNR").LocatorMethod
'set new regex for FL_VSNR
NewRegEx="20\d{2}/\d{2}"
oLocator.RegularExpressions(0).RegularExpression=NewRegEx
End Sub

Man kann das Verhalten sehr schön im KTM Project Builder testen:

Beispieldokument:

KTM-Documentpart

Ursprünglicher Formatlokator:

KTM-FL-Formats75

Ohne den Skriptlokator liefert die Dokumentenextraktion das bekannte Ergebnis 2011/47123:

KTM-Result1

Mit aktivem Skriptlokator erhält man stattdessen 2011/47:

KTM-Result2

Schaut man sich danach im KTM Project Builder noch einmal den Formatlokator an, sieht man, dass sich der reguläre Ausdruck dort tatsächlich verändert hat:

KTM-Formatlocatorchanged

Ich hoffe, dieser etwas tiefere Einblick in die Werkzeugkiste von KTM zeigt, welch ein vielseitiges Produkt KTM eigentlich ist. Ich würde mich über weitere Tipps zur Nutzung von KTM und seiner Skriptsprache freuen und versuche hier regelmäßig weitere Artikel rund um KTM zu veröffentlichen.

Neu: Artikel über Dokumentenklassifizierung mit KTM

Neu: KTM im Versicherungseinsatz: Heller, grauer und dunkler Posteingang

Jürgen Voss

Jürgen Voss unterstützt unsere Kunden bei der Erfassung von Eingangsdokumenten, deren Klassifikation samt Datenextraktion und anschließendem Starten der Geschäftsprozesse.

Die erfassten Dokumente werden dabei in Dokumentenmanagement-systemen wie CenterDevice oder Archivsystemen sicher abgelegt. Dazu zählt auch die E-Mail-Archivierung und die Ablage über die SAP-Archivierungsschnittstelle ArchiveLink.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.