> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Suche nach einzeiligen Feldern mit bekanntem oder unbekanntem Format in Dokumenten mit unterschiedlicher OCR-Qualität

> Erkennen Sie einzeilige Felder wie Rechnungsnummern bei unterschiedlicher OCR-Qualität durch die Kombination von Zeichenkette-Elementen mit regulären Ausdrücken und Alphabeten.

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.

<div id="the-structuredstringsfsp-sample-project">
  ## Das Beispielprojekt StructuredStrings.fsp
</div>

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.

| <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/invoice1.gif?s=991be7fc79faa70ae3b774998733d0c4" alt="Screenshot von Rechnungsseite 1 mit dem Feld „Rechnungsnummer“ in guter Druckqualität" width="301" height="90" data-path="images/flexi-capture/fls/invoice1.gif" />                 | <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/invoice2.gif?s=3f797e0ed40b05f977d6d11de6402b3c" alt="Screenshot von Rechnungsseite 2 mit dem Feld „Rechnungsnummer“ in guter Druckqualität" width="301" height="90" data-path="images/flexi-capture/fls/invoice2.gif" />       |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/invoice3.gif?s=4f03e46dd1dcc7d4c62db299be0f7792" alt="Screenshot von Rechnungsseite 3 mit dem gedruckten Feld „Rechnungsnummer“ auf einem verrauschten Bild" width="301" height="90" data-path="images/flexi-capture/fls/invoice3.gif" /> | <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/invoice4.gif?s=d93733bf66dd1a0b64726d6fb14e999d" alt="Screenshot von Rechnungsseite 4 mit dem handschriftlich ausgefüllten Feld „Rechnungsnummer“" width="301" height="90" data-path="images/flexi-capture/fls/invoice4.gif" /> |

<div id="describe-the-invoice-number-with-a-regular-expression">
  ## Beschreiben Sie die Rechnungsnummer mit einem regulären Ausdruck
</div>

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:

```text theme={null}
NNNN"-"NN"-"[A-Z]"/"NN
```

oder (was dasselbe ist)

```text theme={null}
[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 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.

<div id="add-a-fallback-character-string-element-with-an-alphabet">
  ## Fügen Sie ein Fallback-Zeichenkette-Element mit einem Alphabet hinzu
</div>

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.

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/edit_alph2.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=87ef11061739c78b53c87d120bd500bf" alt="Screenshot des Dialogfelds „Edit Alphabet“ in ABBYY FlexiLayout Studio, in dem alle gültigen Zeichen für das Element NumAsAlphabet aufgelistet sind." width="536" height="350" data-path="images/flexi-capture/fls/edit_alph2.gif" />
</Frame>

Der folgende Code sollte in das Feld **Advanced pre-search relations** eingetragen werden:

```text theme={null}
if (NumAsRegularExpression.IsNull == FALSE) then Dontfind();
```

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.

<Note>
  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:

  ```text theme={null}
  if (NumAsRegularExpression.IsNull == FALSE) then Dontfind();
  else RestrictSearchArea (NumAsRegularExpression.Rect);
  ```
</Note>

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.

<Note>
  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.
</Note>

<div id="why-the-regular-expression-improves-reliability">
  ## Warum der reguläre Ausdruck die Zuverlässigkeit verbessert
</div>

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.

<Frame>
  <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/structure_string.png?fit=max&auto=format&n=r-nfa7jujx5b9gKX&q=85&s=4fc65d41b01bf73bde4d47aae9e14f61" alt="Screenshot in ABBYY FlexiLayout Studio eines verrauschten Bildes, bei dem ein Zeichenkette-Element mit einem angegebenen Alphabet das Feld für die Rechnungsnummer aufgrund des zu hohen Anteils an Nicht-Alphabet-Zeichen nur teilweise erkennt." width="566" height="440" data-path="images/flexi-capture/fls/structure_string.png" />
</Frame>
