Neben Fuzzy-Datenbanken bieten Kofax Transformation Modules (KTM) auch sogenannte Wörterbücher zur Optimierung der Erkennung an. Diese Wörterbücher können in den regulären Ausdrücken eines Formatlokators genutzt werden, um zum Beispiel neben einem Datum der Form „01.12.2015“ auch solche der Form „01. Dezember 2015“ zu finden. Das Wörterbuch würde dann alle Monatsnamen enthalten (Januar, Februar, …).
In den KTM-Fuzzy-Datenbanken kann per Skriptsprache gesucht werden. Dazu gibt es auch Beispielprogramme von KOFAX (z.B. in der Skripting-Hilfe von KTM oder hier: „Best Practices“ ). Entsprechende Beispiele für die Suche in KTM-Wörterbüchern gibt es meines Wissens nach aber nicht. In einem Projekt zur Erkennung von deutschen KFZ-Kennzeichen musste ich die Suche in einem Wörterbuch allerdings per Skript durchführen. Hier möchte ich kurz die Gründe dafür erläutern und ein Beispielskript vorstellen.
Zur Erkennung der KFZ-Kennzeichen reicht normalerweise ein regulärer Ausdruck der Form:
[A-ZÄÖÜ]{1,3}\x20?[\.|\x20|-]\x20?[A-Z]{1,2}[\.|\x20|-]?[0-9]{1,4}
Allerdings liefert dieser auch manchmal „Nicht-KFZ“-Zeichenketten, da vorne ja nur ein bis drei Buchstaben gesucht werden. Schön wäre es, wenn man am Beginn des regulären Ausdrucks statt [A-ZÄÖÜ]{1,3} eine Liste der gültigen Städtekürzel für deutsche Nummernschilder angeben könnte. Damit würde der Kreis falsch erkannter Kennzeichen schon um einiges kleiner. Natürlich kommen einem da sofort die KTM-Wörterbücher in den Sinn. Im Internet finden sich schnell Listen mit diesen Städtekürzeln, und so ist eine enstprechende Wörterbuchdatei (KFZ-Staedte) schnell erstellt:
AIC
AK
AM
AN
ANA
AÖ
AP
AS
ASL
ASZ
AUR
:
:
Der folgende Formatlokator:
liefert dann auch das richtige Ergebnis:
Beim Test eines weiteren Dokuments kam dann aber schnell Ernüchterung auf – Nichts erkannt:
Hier zeigt sich eine Schwäche bei der Einbindung von Wörterbüchern in reguläre Ausdrücke: es funktioniert nur, wenn der Wörterbuchstring durch ein Leerzeichen, Tab, … vom Rest des regulären Ausdrucks getrennt ist.
Dies ist beim ersten Beispiel der Fall: „COE – EW 247“. Das zweite Beispiel „COE.EW.247“ hat Punkte als Trenner zwischen den einzelnen Teilen des Kennzeichens, und die Einbindung des Wörterbuchs funktioniert nicht wie gewünscht.
Auf die optimierte Erkennung der Städtekürzel wollte ich aber nicht verzichten. Dazu benutze ich zunächst wieder den „originalen“ regulären Ausdruck:
[A-ZÄÖÜ]{1,3}\x20?[\.|\x20|-]\x20?[A-Z]{1,2}[\.|\x20|-]?[0-9]{1,4}
und habe dann das gefundene Städtekürzel per Skript gegen das Wörterbuch „KFZ-Staedte“ geprüft. Bei positiver Prüfung wird nun das KFZ-Kennzeichen übernommen, andernfalls verworfen.
Hier nun ein Beispielskript, das zeigt, wie in einem KTM-Wörterbuch gesucht werden kann:
1Function ExistiertStadtAusAMKZ(kennzeichen) As Boolean 2 3 'Es wird das folgende Format für das Kennzeichen erwartet: COE.EW.247 4 5 Dim DictResItems As CscDictionaryResItems 6 Dim Dict As CscDictionary 7 Dim strData As String 8 Dim strReplaceVal As String 9 Dim QueryText As String 10 Dim pos As Integer 11 12 ExistiertStadtAusAMKZ=False 13 pos=InStr(kennzeichen,".") 14 15 If pos>0 Then 16 QueryText=Left(kennzeichen,pos-1) 'Stadtkürzel 17 Set Dict = Project.Dictionaries.ItemByName("KFZ-Staedte") 18 Set DictResItems=Dict.Search(QueryText,CscEvalMatchQuery,5) 19 If DictResItems.Count>0 Then 20 'strData enthält das gefundene Kürzel 21 'strReplaceVal den optionalen Ersetzungswert aus dem Wörterbuch 22 Dict.GetRecordData(DictResItems(0).RecID,strData,strReplaceVal) 23 ExistiertStadtAusAMKZ=True 'da etwas gefunden wurde 24 Else 25 'nichts gefunden 26 ExistiertStadtAusAMKZ=False 27 End If 28 End If 29 30End Function
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.