Zum Hauptinhalt springen
Beim Erstellen eines FlexiLayouts lassen sich Suchbereiche nicht immer durch Beziehungen wie „oberhalb/unterhalb/links von/rechts von“ definieren. Das gilt insbesondere dann, wenn der Suchbereich unerwünschte Objekte enthält, z. B. Objekte, die beim Scannen entstanden sein können. Diese Objekte dürfen nicht in den Erkennungsblock gelangen und müssen daher beim Erstellen des entsprechenden Elements ausgeschlossen werden. Das Adressfeld in den Abbildungen unten ist ein gutes Beispiel. Gemeint ist hier die relative Position der Feldnamen „Address:“, „(Address)“ (die von der Erkennung ausgeschlossen werden müssen) und der Adresse selbst (die erkannt werden soll). Die Funktion Exclude schließt eine Region aus dem Suchbereich eines Elements aus. Die auszuschließende Region wird beim Aufruf der Funktion angegeben. Die ausgeschlossene Region kann entweder die Region einer Hypothese sein (unabhängig davon, ob sie erkannt wurde oder nicht), ein Rectangle oder ein Array von Rectangles der gefundenen Elemente oder eine Region, die aus den Regionen von Objekten aufgebaut ist, die Teil einer gefundenen Hypothese sind (siehe Methode ExcludeSet). Sehen wir uns das Projekt Exclude.fsp an (Ordner %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Exclude), um zu verstehen, wie die Funktion Exclude funktioniert. Das Projekt hat 4 Seiten:
  • Seite 1 - das Adressfeld erstreckt sich über mehrere Zeilen. Der Name „Address:“ steht in der ersten Zeile, daher können wir nicht sagen, dass sich das gesuchte Datenfeld rechts vom oder unter dem Feldnamen befindet. Der Name muss jedoch trotzdem von der Erkennung ausgeschlossen werden;
  • Seite 2 – das Adressfeld hat keinen Namen;
  • Seiten 3 und 4 – die Zeile „(Address)“ liegt innerhalb des Datenfelds. Sie muss jedoch von der Erkennung ausgeschlossen werden.
Auf allen Seiten befindet sich das Adressfeld unter dem Feld mit dem Firmennamen. Zuerst erstellen wir ein Element vom Typ Static Text, nennen es CompanyHeader und geben seinen Wert an. Dieses Element wird verwendet, um den Namen des Felds zu erkennen. Als Nächstes erstellen wir ein Element vom Typ Static Text und nennen es AddressHeader. Dieses Element wird verwendet, um den Namen des Felds zu erkennen. Wir geben die folgenden statischen Textwerte an: Address:|(Address), d. h. wir listen alle Varianten dieser Zeile auf, die erkannt und anschließend im Adressfeld von der Erkennung ausgeschlossen werden sollen. Wir beschreiben die Suchbedingungen für diese Zeilen im Feld Relations und geben an, dass diese Zeilen unterhalb (Below) des Elements CompanyHeader gesucht werden sollen.
Das Element für den Namen muss vor dem Element für das Adressfeld erstellt werden, weil die Funktion Exclude nur Verweise auf Elemente zulässt, die im FlexiLayout-Baum über dem aktuellen Element stehen.
Starten Sie das FlexiLayout-Matchingverfahren (Match FlexiLayout), um sicherzustellen, dass die Adressbezeichnung auf allen Seiten gefunden wird, auf denen sie vorkommt. Da das Adressfeld in diesem Beispiel aus mehreren Zeilen besteht, erstellen wir ein Element vom Typ Paragraph, um danach zu suchen. Wir nennen es Address und geben wie im vorherigen Beispiel an, dass es unterhalb (Below) des Elements CompanyHeader gesucht werden soll. Nachdem Sie das FlexiLayout-Matchingverfahren ausgeführt haben, werden Sie sehen, dass auf den Seiten 1, 3 und 4 die Zeile mit dem Namen ebenfalls in das Adressfeld einbezogen wurde. Gehen wir nun zurück zum Properties-Dialogfeld des Elements Address und klicken Sie auf die Registerkarte Search Constraints. Klicken Sie neben dem Abschnitt Exclude regions of elements auf Add… und wählen Sie das Element AddressHeader aus der Liste aus.
Nachdem Sie die Eigenschaften des Elements gespeichert haben, führen Sie das FlexiLayout-Matchingverfahren erneut aus. Sie werden sehen, dass die Region des Blocks, die dem Adressfeld entspricht, keine rechteckige Form mehr hat, weil die Region des Namens daraus ausgeschnitten wurde.
Im Abschnitt Exclude regions of elements können Sie die Region einer gefundenen Hypothese für ein anderes Element aus dem Suchbereich des aktuellen Elements ausschließen. Wenn Sie einen geometrisch komplexeren Bereich ausschließen oder zuerst eine Region erkennen und diese dann vom Erkennungsprozess ausschließen möchten, sollten Sie die Funktionen Exclude, ExcludeRect und ExcludeSet im Feld Advanced pre-search relations verwenden.
Die Region eines Blocks besteht definitionsgemäß aus übereinander angeordneten Rechtecken, sodass jede horizontale Linie die Region nur einmal schneiden kann, d. h., es darf keine nach oben oder unten vorspringenden vertikalen „Zacken“ geben. Befinden sich daher die auszuschließende Zeile und die benötigten Informationen auf derselben oder annähernd derselben Höhe, kann der Name bei der Erstellung des FlexiLayouts nicht ausgeschlossen werden. In diesem Fall kann der Name nach der Erkennung in FlexiCapture mithilfe der Regel „Aus der Liste ersetzen“ ausgeschlossen werden.