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:
Im ersten Teil dieses Artikels hatten wir den Format Lokator FL_VSNR mit dem regulären Ausdruck 20\d{2}/\d{1,10} benutzt:
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.
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:
1' Class script: Dokumente 2Private Sub SL_ChangeRE_LocateAlternatives(ByVal pXDoc As CASCADELib.CscXDocument, _ 3 ByVal pLocator As CASCADELib.CscXDocField) 4 5Dim NewRegEx As String 6Dim oLocator As CscRegExpLib.CscRegExpLocator 7 8'get format Locator FL_VSNR 9Set oLocator = Project.ClassByName("Dokumente").Locators.ItemByName("FL_VSNR").LocatorMethod 10'set new regex for FL_VSNR 11NewRegEx="20\d{2}/\d{2}" 12oLocator.RegularExpressions(0).RegularExpression=NewRegEx 13End Sub
Man kann das Verhalten sehr schön im KTM Project Builder testen:
Beispieldokument:
Ursprünglicher Formatlokator:
Ohne den Skriptlokator liefert die Dokumentenextraktion das bekannte Ergebnis 2011/47123:
Mit aktivem Skriptlokator erhält man stattdessen 2011/47:
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:
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
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.