Das Beispielprojekt StructuredStrings.fsp
Das BeispielprojektStructuredStrings.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 WertInvoiceN:.
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:
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.
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:
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.




