Zum Hauptinhalt springen
Zum Erkennen einzeiliger Felder verfügt FlexiLayout Studio über ein spezielles Element Zeichenkette. Hat das gesuchte Feld ein bekanntes Format, kann es in den Eigenschaften des entsprechenden Elements auf der Registerkarte Zeichenkette im Feld Regular expression beschrieben werden. Die Verwendung eines regulären Ausdrucks setzt jedoch gedruckte Dokumente und eine gute Bildqualität voraus, denn bei der Beschreibung mit einem regulären Ausdruck sind keine Fehler im Feld zulässig, andernfalls wird das Element einfach 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. Die Suche nach einem einzeiligen Feld „Rechnungsnummer“ mit ähnlichem Format auf allen Seiten wird im Beispielprojekt StructuredStrings.fsp gezeigt (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, die Druckqualität ist gut;
  • Seite 3 – das Feld „Rechnungsnummer“ ist gedruckt, das Bild weist Rauschen auf;
  • Seite 4 – die Bildqualität ist gut, aber das Feld „Rechnungsnummer“ ist handschriftlich ausgefüllt.
Wir suchen das Feld „Rechnungsnummer“ anhand des Feldnamens. Zuerst müssen wir ein Element erstellen, das die Suchbedingungen des Feldnamens beschreibt. Das erstellte Element ist vom Typ Static Text, heißt InvoiceNumberHeader und hat den Wert “InvoiceN:”. Das Feld „Rechnungsnummer“ ist ein einzeiliges Feld. Um es zu erkennen, haben wir ein Element vom Typ Zeichenkette mit dem Namen NumAsRegularExpression erstellt. Wie auf den Seiten des Projekts zu sehen ist, kann das Format des Felds „Rechnungsnummer“ mit dem folgenden regulären Ausdruck beschrieben werden: NNNN”-“NN”-“[A-Z]”/“NN oder (was dasselbe ist) [0-9]{4}”-“[0-9]{2}”-“[A-Z]”/” [0-9]{2} 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 FlexiLayout-Matching-Verfahrens 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. In den Ergebnissen der Vorerkennung (Z.OOO-41-C/03) können Sie sehen, dass sie ebenfalls nicht dem beschriebenen Format entspricht. Die folgende Lösung für dieses Problem wird empfohlen. Wir erstellen ein weiteres Element vom Typ Zeichenkette mit dem Namen NumAsAlphabet. Dafür legen wir dieselben Suchbedingungen fest wie für das Element NumAsRegularExpression. Anschließend gruppieren wir die beiden Elemente zu einem Gruppenelement InvoiceNumber. Das Element NumAsAlphabet beschreiben wir jedoch nicht als regulären Ausdruck, sondern als Liste aller gültigen Zeichen. Der folgende Code sollte in das Feld Advanced pre-search relations geschrieben werden: if (NumAsRegularExpression.IsNull == FALSE) then Dontfind(); Das bedeutet, dass die Suche nach einer Zeichenfolge mit unbekanntem Format, die durch das Element NumAsAlphabet beschrieben wird, nur dann durchgeführt wird, wenn das Programm sie mithilfe des Elements NumAsRegularExpression, das eine Zeichenfolge mit festem Format beschreibt, nicht erkennen kann.
Wenn Sie die Suchbedingungen für das Element NumAsAlphabet festlegen, können Sie per Drag&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 eintragen:
if (NumAsRegularExpression.IsNull == FALSE) then Dontfind(); else RestrictSearchArea (NumAsRegularExpression.Rect); Dieser Code bedeutet, dass nur dann versucht wird, das Element NumAsAlphabet zu finden, wenn die Struktur der Rechnungsnummer nicht dem angegebenen Format entspricht, d. h., wenn das Programm das Element NumAsRegularExpression nicht erkannt hat. Nach dem Element NumAsAlphabet wird dabei in demselben Bereich gesucht, in dem das Element NumAsRegularExpression nicht gefunden wurde. Nun starten wir das FlexiLayout-Matching-Verfahren auf allen Seiten erneut. Wie im Projekt zu sehen ist, wird das Feld für die Rechnungsnummer jetzt auf jeder Seite erfolgreich gefunden. Im Projektbaum haben wir einen Textblock mit dem Namen InvoiceNum erstellt. Die Gruppe SearchElements.InvoiceNumber ist als Source-Element dafür angegeben. In diesem Stadium ist die Erstellung eines FlexiLayouts zum Erkennen von Feldern „Rechnungsnummer“ abgeschlossen.
Falls die oben 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 dies das Element vom Typ Object Collection mit dem Namen NumAsObjectCollection. Aufgrund der guten Bildqualität in unserem 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 Element vom Typ Object Collection kann erforderlich sein, wenn die Ergebnisse der Vorerkennung auf verschiedenen Seiten nur schwer vorherzusagen sind, der Suchbereich jedoch genau beschrieben werden kann, sodass keine unerwünschten Informationen in die Hypothesen gelangen.
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 Elements vom Typ Zeichenkette mit einem angegebenen Alphabet zu einem zu hohen Fehleranteil führen (der Parameter Percentage of non-alphabet characters). Infolgedessen wird das Element entweder gar nicht oder nur teilweise erkannt. Ein Beispiel für eine solche Situation ist in der Abbildung unten dargestellt.