> ## 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.

# Datumssuche nach Erkennung mit hoher bzw. niedriger Qualität

> Suchen Sie in Bildern niedriger Qualität nach Datumsangaben, indem Sie im FlexiLayout-Beispiel SearchOfDate.fsp die Elemente Date, Zeichenkette und Object Collection kombinieren.

Dieser Abschnitt beschreibt mehrere typische Möglichkeiten, FlexiLayouts zu erstellen, die auf Bildern niedriger Qualität Datumsfelder finden. Solche Bilder kommen recht häufig vor und weisen verschiedene Scanfehler auf, die meist durch falsche Scaneinstellungen verursacht werden. So kann das Bild beispielsweise zu hell oder zu dunkel sein, wenn die Helligkeitseinstellungen nicht korrekt sind. Dadurch können Informationen im Bild verloren gehen oder Bildbereiche verrauscht sein.

<div id="when-the-date-element-cannot-detect-a-date">
  ## Wenn das Date-Element ein Datum nicht erkennen kann
</div>

FlexiLayout Studio bietet ein spezielles **Date**-Element zum Erkennen von Datumsangaben. Beim Erstellen eines FlexiLayout kann sich dieses Element jedoch als unzureichend erweisen. Das kann passieren, wenn das Datum in den Dokumenten keinem der im **Date**-Element verfügbaren Formate entspricht.

So unterstützt FlexiLayout Studio für die Angabe des Monats im Datumsfeld die folgenden Sprachen: Englisch, Tschechisch, Dänisch, Niederländisch, Estnisch, Finnisch, Französisch, Deutsch, Griechisch, Ungarisch, Italienisch, Lettisch, Litauisch, Norwegisch, Polnisch, Portugiesisch, Russisch, Spanisch, Schwedisch und Türkisch.

Wenn der Monat in einer anderen als den aufgeführten Sprachen ausgeschrieben ist, entspricht das Datum keinem der verfügbaren Formate, sodass Sie es nicht mit einem **Date**-Element erkennen können.

Fehler bei der Datumssuche können auch auftreten, wenn das Bild Elemente enthält, die nicht entfernt werden können. Zum Beispiel kann das Datum unterstrichen sein und es kann keine sichtbare Lücke zwischen dem Datum und der Unterstreichung bestehen, es kann durchgestrichen sein oder in Zeichenfeldern mit schwarzen Trennlinien (Rahmen, Kämmen) stehen.

Auch Sprenkel im Suchbereich oder die Tatsache, dass das Datum nicht gedruckt, sondern handschriftlich eingetragen ist, können dazu führen, dass sich das **Date**-Element nicht für die Datumssuche verwenden lässt.

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

Wie Sie eine Suche nach einem Datumsfeld am besten einrichten, wird im Beispielprojekt `SearchOfDate.fsp` beschrieben (Ordner `%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Date`).

Das Projekt enthält fünf Seiten:

| Seite   | Beschreibung                                                             |
| :------ | :----------------------------------------------------------------------- |
| Seite 1 | Das Datumsformat kann mithilfe des **Date**-Elements beschrieben werden. |
| Seite 2 | Der Monat im Datum ist auf Französisch angegeben.                        |
| Seite 3 | Das Datum ist unterstrichen.                                             |
| Seite 4 | Das Datumsfeld ist verrauscht.                                           |
| Seite 5 | Das Datum ist handschriftlich ausgefüllt.                                |

Ziel ist es, das Datum in allen Bildern zu finden, auch in solchen, deren Datumsformat vom **Date**-Element nicht unterstützt wird.

<div id="search-for-supported-date-formats-with-the-date-element">
  ## Suche nach unterstützten Datumsformaten mit dem Date-Element
</div>

Alle Elemente, die das Datumsfeld beschreiben, sind in einem Element **DateGroup** zusammengefasst. Zunächst enthält diese Gruppe ein Element, das nach dem Namen des Datumsfelds sucht. Im Beispielprojekt ist dies ein **Static-Text-Element** mit dem Namen **DateHeader** und dem einzigen Wert **Date:**.

<Note>
  Das Einrichten der Suchbedingungen für alle Elemente im Abschnitt **Relations** ist nicht schwierig und wird daher hier nicht beschrieben. Sie können es direkt im Projekt nachsehen.
</Note>

Die Gruppe enthält außerdem ein Element vom Typ **Date** mit dem Namen **DateField**. Dieses Element sucht nach Datumsfeldern, deren Format vom **Date**-Element unterstützt wird.

Wie im Projekt zu sehen ist, kann das **Date**-Element das Datum nur auf der ersten Seite erkennen.

<div id="search-for-other-date-formats-with-a-character-string-element">
  ## Nach anderen Datumsformaten mit einem Character String-Element suchen
</div>

Um auf den anderen Seiten nach Datumsangaben zu suchen, verwendet das Projekt ein **Character String**-Element mit dem Namen **DateAsString**. Dieses Element verwendet ein Alphabet, das alle Zeichen umfasst, die voraussichtlich in den Bildern vorkommen.

<Note>
  Wenn der Inhalt eines Datenfelds strukturiert sein kann und ein Format hat, das vom Element **Date** nicht unterstützt wird, empfiehlt es sich, dieses Format mit einem regulären Ausdruck zu beschreiben, anstatt ein Alphabet anzugeben.

  Sie müssen jedoch sicher sein, dass die verarbeiteten Bilder eine hohe Qualität haben, da ein regulärer Ausdruck eine 100%ige Übereinstimmung zwischen dem Feld und der beschriebenen Struktur voraussetzt (Alphabete hingegen erlauben einen gewissen Prozentsatz an Fehlern, der in den Eigenschaften des Elements angegeben wird). Daher sind Alphabete in Fällen, in denen die Genauigkeit der Erkennung nicht garantiert werden kann, das flexiblere Werkzeug.

  Wenn Sie wissen, dass der Monat im Datum als Wort in derselben Sprache wie die Sprache der Vorerkennung geschrieben wird, kann es ratsam sein, das Datumsfeld in drei Abschnitte (Tag, Monat, Jahr) zu unterteilen und das Monatsfeld mithilfe eines Elements vom Typ **Static Text** separat zu suchen.

  Ein solches Static-Text-Element sollte alle möglichen Varianten des Monats beschreiben (zum Beispiel ausgeschriebene und abgekürzte Monatsnamen in der jeweiligen Sprache). Die Felder für Tag und Jahr können dann rechts bzw. links vom Monat mithilfe von **Character String**-Elementen gefunden werden.
</Note>

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/edit_alph.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=6a285e2e59f7f19a0125c3e150e88979" alt="Screenshot des Alphabet-Editors in ABBYY FlexiLayout Studio, der zum Festlegen der für das Character String-Element DateAsString zulässigen Zeichen verwendet wird." width="536" height="350" data-path="images/flexi-capture/fls/edit_alph.gif" />
</Frame>

Um den Abgleich des FlexiLayouts zu optimieren, wird im Feld Advanced pre-search relations für das Element **DateAsString** die folgende Bedingung angegeben:

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

was gleichbedeutend ist mit:

```text theme={null}
if not DateField.IsNull then Dontfind();
```

Diese Bedingung bedeutet, dass nur dann nach dem Datum als Zeichenkette gesucht wird, wenn das Datum mithilfe eines **Date**-Elements nicht erkannt werden kann.

Wie das Projekt zeigt, findet das Element **DateAsString** das Datum auf den verbleibenden Seiten des Projekts, auf denen das Element **Date** es nicht erkennen konnte.

<div id="capture-partially-recognized-dates-with-an-object-collection-element">
  ## Teilweise erkannte Datumsangaben mit einem Object-Collection-Element erfassen
</div>

Auf Seite 4 enthält die erkannte Zeichenkette jedoch nur einen Teil des Datumsfeldes. Wenn Sie sich die Ergebnisse der Vorerkennung für das Datumsfeld ansehen (indem Sie in der Symbolleiste auf **Show Raw Objects** klicken), wird der Grund für die teilweise Erkennung deutlich. Der Suchbereich enthält nicht nur Textobjekte, sondern auch andere Objekttypen: **Picture** und **Punctuation mark**.

Diese Situation ist typisch für Bilder von geringer Qualität: Textobjekte werden bei der Vorerkennung nicht immer erkannt.

<Frame>
  <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/prop_search_elements.gif?fit=max&auto=format&n=r-nfa7jujx5b9gKX&q=85&s=824530b896543e43de095ddbc6a7fe18" alt="Screenshot der Raw Objects der Vorerkennung in ABBYY FlexiLayout Studio, der zeigt, dass der Suchbereich des Datumsfeldes Objekte vom Typ Text, Picture und Punctuation mark enthält." width="431" height="455" data-path="images/flexi-capture/fls/prop_search_elements.gif" />
</Frame>

Um alle dem Datumsfeld zugeordneten Objekte zu finden, verwendet das Projekt ein **Object Collection**-Element mit dem Namen **DateAsObjectCollection**. In den Eigenschaften des Elements werden alle Objekttypen angegeben, die bei der Vorerkennung im Datumsfeld erkannt wurden.

Um den Abgleich des FlexiLayouts zu optimieren, wird im Feld **Advanced pre-search relations** für die Elemente **DateAsObjectCollection** und **DateAsString** die folgende Bedingung verwendet:

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

<Note>
  Die Bedingung `if (DateAsString.IsNull == FALSE) then Dontfind()` kann nicht zu den Advanced-Eigenschaften des Elements **DateAsObjectCollection** hinzugefügt werden, weil die erkannte Zeichenfolge, wie das Beispiel zeigt, nur einen Teil des Datums enthalten kann.
</Note>

<div id="define-the-date-block-region-from-alternativedategroup">
  ## Date-Blockregion aus AlternativeDateGroup definieren
</div>

Zu diesem Zeitpunkt ist der Satz von Elementen, die die Suchbedingungen für die Datumsfelder beschreiben, vollständig. Das Gruppenelement `SearchElements.DateGroup.AlternativeDateGroup`, das aus den Elementen **DateField**, **DateAsString** und **DateAsObjectCollection** besteht, ist im Projektbaum als Source element für den **Date**-Block angegeben.

Da die Methode `Dontfind()` verwendet wurde, um die Eigenschaften der Elemente **DateAsString** und **DateAsObjectCollection** zu beschreiben, entspricht die tatsächliche Region des erkannten Blocks entweder der Region, die durch die Hypothese für das Element **Date** gefunden wurde, oder der Kombination der Regionen der Elemente **DateAsObjectCollection** und **DateAsString**.

Im letzteren Fall wird davon ausgegangen, dass die Region des Elements **DateAsString** Teil der Region des Elements **DateAsObjectCollection** ist, sodass die resultierende Region der Region des Elements **DateAsObjectCollection** entspricht.

<Note>
  In diesem Fall können Sie das Gruppenelement `SearchElements.DateGroup.AlternativeDateGroup` als Source element angeben, da die Situation relativ einfach ist. Die Region der Gruppe ist eine Kombination der Regionen ihrer erkannten Subelemente.

  Mit der Methode `Dontfind()` kann die Suche nach einigen Subelementen übersprungen werden. Dadurch entspricht die Region des Gruppenelements `SearchElements.DateGroup.AlternativeDateGroup` der Region des Subelements. Im angegebenen Beispiel hilft die Methode `Dontfind()` nicht nur dabei, den Abgleich des FlexiLayouts zu optimieren, sondern vereinfacht auch die Beschreibung von Blöcken.
</Note>

Alternativ können Sie den folgenden Code im Abschnitt **Expression** verwenden.

```text theme={null}
Rect OutputRect;
let dateGroup = SearchElements.DateGroup.AlternativeDateGroup;
if (dateGroup.DateField.IsNull == FALSE) then
outputRect = dateGroup.DateField.Rect;
else
outputRect = dateGroup.DateAsObjectCollection.Rect;
OutputRegion = outputRect;
```

Die Verwendung eines Ausdrucks bietet zusätzliche Möglichkeiten. Zum Beispiel können Sie prüfen, ob die Region des Elements **DateAsString** tatsächlich Teil der Region von **DateAsObjectCollection** ist.

<Frame>
  <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/search_date.png?fit=max&auto=format&n=r-nfa7jujx5b9gKX&q=85&s=49c5578cea473c4c03cec2281be1f73f" alt="Screenshot des Abschnitts „Expression“ in ABBYY FlexiLayout Studio, der den FlexiLayout-Sprachcode zeigt, mit dem die Ausgaberegion des Date-Blocks aus den Elementen von AlternativeDateGroup im Projekt SearchOfDate.fsp definiert wird." width="532" height="498" data-path="images/flexi-capture/fls/search_date.png" />
</Frame>

<Note>
  Die Verwendung eines **Character String-Elements** zur Suche nach einem Datumsfeld, ohne das Zeichenkettenformat zu definieren oder ein **Object Collection**-Element zu verwenden, wie im angegebenen Beispiel, kann zu guten Ergebnissen führen, wenn sich der Suchbereich des Datumsfelds klar definieren lässt.

  Wenn sich jedoch mehrere Zeichenketten im Suchbereich befinden, sollte das Zeichenkettenformat mithilfe eines regulären Ausdrucks oder eines enger gefassten Alphabets beschrieben werden. Andernfalls kann die endgültige Hypothese unbefriedigend sein.

  Mit einem **Character String-Element** können Sie die Anzahl der Zeichen in einer Zeichenkette, die Anzahl der Wortenden und die Länge von Leerzeichen begrenzen, um falsche Hypothesen herauszufiltern. Wenn ein **Object Collection**-Element verwendet wird, enthält die Hypothese alle Objekte im Bild, die sich innerhalb des Suchbereichs befinden und die Einschränkungen für die Objektgröße erfüllen.
</Note>
