//

Kofax Transformation Modules (KTM): ‚Freiformerkennung‘ für handschriftliche Nummern

19.7.2015 | 3 Minuten Lesezeit

Freiformerkennung versucht im Gegensatz zur formularbasierten Erkennung, bestimmte Werte wie etwa eine Versicherungsnummer, irgendwo auf einem Dokument zu finden. Hilfreich dabei ist immer eine bestimmte Struktur des gesuchten Wertes, der dann meist über reguläre Ausdrücke gesucht wird. Darüber hinaus werden zusätzlich auch noch sogenannte Schlagwörter zur Suche genutzt, die oftmals in der ‚Nähe‘ der gesuchten Werte stehen (z.B. ‚Versicherungsnummer‘, ‚VersNr.‘, … vor einer Versicherungsnummer).

Diese Technik bieten die meisten der am Markt befindlichen Klassifikations-/Extraktionsprodukte an. Bei Maschinenschriften liefern auch alle mehr oder weniger ähnliche Ergebnisse.

Beim von uns eingesetzten Produkt Kofax Transformation Modules (KTM) sind die passenden Tools die sogenannten ‚Format Lokatoren‘. Siehe dazu auch die bisher erschienen Blogartikel über KTM (1).

Im Folgenden soll gezeigt werden, wie man auch handschriftliche Nummern, die eine bestimmte Struktur aufweisen, irgendwo auf einem Dokument finden kann.

In unserem Beispiel suchen wir auf den Dokumenten handschriftlich notierte Versicherungsnummern, die folgenden Aufbau haben: 1x-xxxxxx-xx. Dabei steht das x für eine Ziffer zwischen 0 und 9, Beispielnummer: 14-386723-89.

Beispieldokument:

Im KTM-Projekt muss das Dokument zunächst auf die richtige Dokumentenklasse klassifiziert werden (im Beispiel: InsuranceDocs). Dies kann mit irgendeiner der verfügbaren Klassifikationsmethoden erfolgen (siehe dazu: Klassifizierung mit KTM ).

Im KTM Projekt hat die Klasse ‚InsuranceDocs‘ noch das Feld ‚InsuranceNumber‘ und den Lokator ‚Numbers‘ (erweiterter Zonenlokator):

Hier zunächst die Grundidee für die ‚Freiformerkennung‘ der handschriftlichen Nummern:

  1. Ein erweiterter Zonenlokator liest den Text der gesamten Seite, indem die Zone des Lokators entsprechend groß definiert wird.
  2. Meiner Erfahrung nach liest die RecoStar-Engine Zahlen besser als die FineReader-Engine. Daher wird im erweiterten Zonenlokator RecoStar mit einem numerischen Profil [0-9-] eingesetzt.
  3. Das Ergebnis des erweiterten Zonenlokators ist eine Zeichenkette bestehend aus Ziffern und -.
  4. Im Skript der Dokumentenklasse ‚InsuranceDocs‘ wird innerhalb der Zeichenkette mit regulären Ausdrücken nach einer Versicherungsnummer gesucht.
  5. Optimalerweise lässt sich die gefundene Nummer noch gegen eine Bestandsdatenbank prüfen und wird dann dem Ergebnisfeld ‚InsuranceNumber‘ zugewiesen.

Aufbau des erweiterten Zonenlokators

Ziehen Sie die Zone über den Bereich der Beispielseite, in dem die handschriftlichen Nummern vorkommen können:

Weisen Sie der Zone eine RecoStar-Zonen-Engine mit folgenden Einstellungen zu:

Entfernen Sie den Haken bei ‚Registration failure makes zone invalid‘, da bei unstrukturierten Dokumenten die Registrierung fehlschlagen wird, und wir das Ergebnis auf jeden Fall erhalten wollen:

Der Test des erweiterten Zonenlokators liefert dann folgendes Ergebnis:

Das sieht zunächst chaotisch aus, aber in der vierten Zeile von unten, sieht man schon die gewünschte Versicherungsnummer 14-386723-89. Diese muss nun noch per Skripting aus der Ergebniszeichenkette extrahiert werden.

Extraktion der Versicherungsnummer per Skript

Wir nutzen beispielhaft das ‚Document_AfterProcess‘-Event im Skript der Dokumentenklasse ‚InsuranceDocs‘, um die Versicherungsnummer per regulärem Ausdruck aus der Ergebniszeichenkette des erweiterten Zonenlokators zu extrahieren.

Dazu muss zunächst die ‚Microsoft VBScript Regular Expressions 5.5‘-Bibliothek als Referenz eingebunden werden:

Diese Microsoft Bibliothek bietet die Möglichkeit in String-Variablen mit regulären Ausdrücken zu suchen (Microsoft VBScript Regular Expressions 5.5 Erläuterungen ).

Das eigentliche KTM-Skript sieht dann beispielsweise folgendermaßen aus:

1Option Explicit
2
3' Class script: InsuranceDocs
4
5Private Sub Document_AfterProcess(ByVal pXDoc As CASCADELib.CscXDocument)
6   Dim String_RecoStar As String
7   Dim myRegExp As RegExp
8   Dim myMatches As MatchCollection
9   Dim myMatch As Match
10   Dim InsNbr_Recostar As String
11
12   Set myRegExp = New RegExp
13
14   'get the first alternative from the advanced zone locator
15   String_RecoStar=Trim(pXDoc.Locators.ItemByName("Numbers").Alternatives(0).SubFields.ItemByName("UF_Zone0").Text)
16
17   myRegExp.IgnoreCase = True
18   myRegExp.Global = True
19   'define the regular expression for the insurance numbers
20   myRegExp.Pattern = "1(1|2|3|4|5|6|7|8|9)\s?\-\s?\d{6}\s?\-\s?\d{2}"
21
22   Set myMatches = myRegExp.Execute(String_RecoStar)
23   If myMatches.Count>0 Then 'if something was found:
24      'we just take the first result in this example...
25      InsNbr_Recostar=Replace(myMatches.Item(0)," ","") 'get rid of spaces
26      If DB_Check(InsNbr_Recostar)=True Then 'if possible validate the number against a database
27         'put the value into the InsuranceNumber field
28         pXDoc.Fields.ItemByName("InsuranceNumber").Text=InsNbr_Recostar
29         pXDoc.Fields.ItemByName("InsuranceNumber").Valid=True
30      End If
31   End If
32End Sub
33
34Function DB_Check(Number As String) As Boolean
35   DB_Check=True 'just return True in this example
36   'Implement the database validation of the extracted insurance number
37End Function
38

Die Verarbeitung des Beispieldokuments im KTM Project Builder sollte damit zu folgendem Ergebnis führen:

(1) Bisher erschienene Artikel über KTM:

KTM im Versicherungseinsatz: Heller, grauer und dunkler Posteingang

Dokumentenklassifizierung mit Kofax Transformation Modules (KTM)

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

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

Beitrag teilen

Gefällt mir

0

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//

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.