Zum Erkennen einzeiliger Felder stellt FlexiLayout Studio ein spezielles Element Zeichenkette bereit. Wenn das Feld ein bekanntes Format hat, können Sie es in den Eigenschaften des Elements auf der Registerkarte Zeichenkette im Feld Regular expression beschreiben.
Die Verwendung eines regulären Ausdrucks setzt jedoch gedruckte Dokumente und eine gute Bildqualität voraus, denn bei einem regulären Ausdruck sind keine Fehler im Feld zulässig. Andernfalls wird das Element nicht erkannt.
Reguläre Ausdrücke dürfen auch dann nicht verwendet werden, wenn das Dokument handschriftlich ausgefüllt ist, selbst wenn sich sein Layout beschreiben lässt. Dennoch kann ein solches Feld erkannt werden.
Das Beispielprojekt StructuredStrings.fsp
Das Beispielprojekt StructuredStrings.fsp zeigt, wie nach einem einzeiligen Feld Rechnungsnummer mit ähnlichem Format auf allen Seiten gesucht wird (Ordner %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Structured strings).
Das Projekt umfasst vier Seiten:
- Seiten 1 und 2 – Das Feld Rechnungsnummer ist gedruckt, und die Druckqualität ist gut.
- Seite 3 – Das Feld Rechnungsnummer ist gedruckt, aber das Bild ist verrauscht.
- Seite 4 – Die Bildqualität ist gut, aber das Feld Rechnungsnummer ist handschriftlich ausgefüllt.
Beschreiben Sie die Rechnungsnummer mit einem regulären Ausdruck
Die Suche nach dem Feld Rechnungsnummer erfolgt anhand des Feldnamens. Zunächst benötigen Sie ein Element, das die Suchbedingungen des Feldnamens beschreibt. Im Projekt ist dies ein Static Text-Element mit dem Namen InvoiceNumberHeader und dem Wert InvoiceN:.
Das Feld Rechnungsnummer ist ein einzeiliges Feld. Um es zu erkennen, verwendet das Projekt ein Element vom Typ Zeichenkette mit dem Namen NumAsRegularExpression. Wie auf den Seiten des Projekts zu sehen ist, kann das Format des Felds Rechnungsnummer mit dem folgenden regulären Ausdruck beschrieben werden:
oder (was dasselbe ist)
Das bedeutet, dass die Nummer folgendem Muster entspricht: „vier Ziffern - zwei Ziffern - ein lateinischer Großbuchstabe/zwei Ziffern“.
Wie im Projekt zu sehen ist, wurden nach dem Ausführen des Abgleichs des FlexiLayouts durch Auswahl des Befehls Match für das Element NumAsRegularExpression auf den Seiten 3 und 4 Nullhypothesen erzeugt, d. h., das Element wurde nicht erkannt.
Auf Seite 3 führte das Rauschen zu einer Nichtübereinstimmung zwischen dem Feld und dem regulären Ausdruck. Wenn Sie Seite 3 öffnen und in der Symbolleiste auf “L” (“Show Recognized Lines”) klicken, sieht die Vorerkennung der Rechnungsnummer auf der Seite wie 10&0-20-A/04 aus.
Auf Seite 4 ist die Rechnungsnummer handschriftlich ausgefüllt. Das Ergebnis der Vorerkennung (Z.OOO-41-C/03) entspricht ebenfalls nicht dem beschriebenen Format.
Fügen Sie ein Fallback-Zeichenkette-Element mit einem Alphabet hinzu
Die empfohlene Lösung sieht wie folgt aus: Erstellen Sie ein weiteres Zeichenkette-Element und nennen Sie es NumAsAlphabet. Geben Sie dafür dieselben Suchbedingungen an wie für das Element NumAsRegularExpression. Gruppieren Sie anschließend die beiden Elemente zu einem Group-Element, InvoiceNumber.
Beschreiben Sie das Element NumAsAlphabet jedoch nicht als regulären Ausdruck, sondern als Liste aller gültigen Zeichen.
Der folgende Code sollte in das Feld Advanced pre-search relations eingetragen werden:
Das bedeutet, dass nach einer Zeichenfolge mit unbekanntem Format, die durch das Element NumAsAlphabet beschrieben wird, nur dann gesucht wird, wenn FlexiLayout Studio sie mithilfe des Elements NumAsRegularExpression, das eine Zeichenfolge mit festem Format beschreibt, nicht erkennen kann.
Beim Festlegen der Suchbedingungen für das Element NumAsAlphabet können Sie per Drag-and-drop die Einstellungen aus dem Abschnitt Relations des Elements NumAsRegularExpression in denselben Abschnitt des aktuellen Elements kopieren. Alternativ können Sie den folgenden Code in das Feld Advanced pre-search relations schreiben:
Dieser Code bedeutet, dass nur dann nach dem Element NumAsAlphabet gesucht wird, wenn die Struktur der Rechnungsnummer nicht dem angegebenen Format entspricht, das heißt, wenn FlexiLayout Studio das Element NumAsRegularExpression nicht erkennen konnte. Das Element NumAsAlphabet wird dann in demselben Bereich gesucht, in dem das Element NumAsRegularExpression nicht gefunden wurde.
Führen Sie jetzt erneut den Abgleich des FlexiLayouts auf allen Seiten aus. Wie das Projekt zeigt, wird das Feld Rechnungsnummer jetzt auf jeder Seite erfolgreich gefunden.
Der Projektbaum enthält einen Textblock mit dem Namen InvoiceNum. Als Source element ist die Gruppe SearchElements.InvoiceNumber angegeben. In diesem Stadium ist das FlexiLayout zum Erkennen von Feldern Rechnungsnummer vollständig.
Falls die zuvor beschriebene Methode aus irgendeinem Grund nicht ausreicht, um das Datenfeld zu erkennen (unabhängig davon, ob sein Format bekannt oder unbekannt ist), kann in der Gruppe ein weiteres Element (vom Typ Object Collection) erstellt werden. In diesem Projekt ist es ein Object Collection-Element mit dem Namen NumAsObjectCollection.Aufgrund der guten Bildqualität in diesem Projekt wird es tatsächlich nicht benötigt und nur als Beispiel gezeigt (für dieses Element ist der Befehl Disable angegeben).Ein zusätzliches Object Collection-Element kann erforderlich sein, wenn sich die Ergebnisse der Vorerkennung auf verschiedenen Seiten nur schwer vorhersagen lassen, der Suchbereich jedoch genau beschrieben werden kann, sodass keine unerwünschten Informationen in die Hypothesen gelangen.
Warum der reguläre Ausdruck die Zuverlässigkeit verbessert
Dabei kann die folgende Frage aufkommen: Warum wird ein regulärer Ausdruck benötigt, wenn das Feld manchmal auch ohne ihn erkannt werden kann? Die Antwort ist, dass die Verwendung eines regulären Ausdrucks die Suche zuverlässiger macht.
Wenn dieses Element gefunden wird, können Sie sicher sein, dass genau die benötigte Zeile gefunden wurde. Diese Information kann dann zuverlässig verwendet werden, um weitere Elemente und ihre Beziehungen zu erkennen. Wenn die Suchbedingungen wenig restriktiv sind, können Sie nicht absolut sicher sein, dass Sie genau das gefunden haben, was Sie benötigen.
Dies kann passieren, wenn das Bild stark verrauscht ist. In solchen Fällen kann die Verwendung eines Zeichenkette-Elements mit einem angegebenen Alphabet zu einem zu hohen Fehleranteil führen (der Percentage of non-alphabet characters-Parameter).
Infolgedessen wird das Element entweder gar nicht oder nur teilweise erkannt. Die folgende Abbildung zeigt ein Beispiel für eine solche Situation.