Zum Hauptinhalt springen
Wir haben bereits damit begonnen, Daten aus den deutschen Dokumenten zu extrahieren. Daher konfigurieren wir zunächst die Aktivität Extraction Rules für diese Dokumente.

Bevor Sie beginnen

  1. Öffnen Sie die Aktivität “Sick Note DE” im Activity Editor.
  2. Wählen Sie eines der Dokumente aus dem Dokumentensatz aus.
  3. Vergewissern Sie sich, dass der erweiterte Modus für die Elementeigenschaften aktiviert ist. Um diesen Modus ein- oder auszuschalten, klicken Sie auf das Symbol im Bereich Properties.
  4. Alle hochgeladenen Dokumente wurden vorab erkannt, und es ist hilfreich zu sehen, welche Objekte im Bild gefunden wurden. Klicken Sie auf das Symbol. Wenn Sie dieses Symbol aufgrund der Größe Ihres Bildschirms nicht sehen, klicken Sie auf das Symbol und wählen Sie Recognized Words. Die entsprechenden Objekte werden im Dokumentbild hervorgehoben. Sie können jederzeit zwischen verschiedenen Arten hervorgehobener Objekte wechseln. Das Umschalten auf Recognized Lines kann zum Beispiel beim Auffinden von Absätzen hilfreich sein, und das Umschalten auf Separators erleichtert die Konfiguration eines Separator-Suchelements.
  5. Befindet sich ein Suchelement außerhalb des Suchbereichs, wird es nicht gefunden. Aktivieren Sie die Option Show search area im Kontextmenü des Dokumentbilds. Der Suchbereich für jedes Element wird grün hervorgehoben, wenn Sie das Abgleichergebnis auswerten.
Beachten Sie, dass es hilfreich sein kann, mit erweiterten Eigenschaften der Suchelemente zu experimentieren, um die Extraktionsgenauigkeit zu verbessern. Wir empfehlen Ihnen außerdem, regelmäßig auf Match zu klicken, um zu prüfen, wie Ihre Extraktionsregeln funktionieren, und um Extraktionsergebnisse bei verschiedenen Dokumenten im Satz zu vergleichen. Sie können ein einzelnes Element ohne Beziehungen zu anderen Elementen testen, indem Sie in seinem Kontextmenü auf Match Element klicken. In diesem Fall wirkt sich die Hypothesenqualität vorheriger Elemente nicht auf die Abgleichergebnisse aus.

Extrahieren der Patientendaten

Beginnen wir damit, die fehlenden Daten für den Patienten zu extrahieren. Dazu müssen wir mehrere Suchelemente erstellen. Wir empfehlen, alle Elemente, die zu einer Entität gehören, zu gruppieren. Elemente werden nacheinander abgeglichen, und wenn das oberste Element nicht gefunden wird, verringert dies die Hypothesengüte für nachfolgende Elemente. Gleichzeitig werden Gruppen von Suchelementen während des Abgleichs unabhängig voneinander verarbeitet, und für jede Gruppe wird eine eigene Hypothese formuliert. So können Sie steuern, wie Elemente einander beeinflussen. Außerdem können Sie die Abgleichergebnisse auf einen Blick bewerten, indem Sie prüfen, ob die Gruppenelemente erfolgreich gefunden wurden. Schließlich kann das Gruppieren die Abgleichszeit verkürzen.
  1. Klicken Sie auf Create Element und wählen Sie das Element Group aus der Dropdown-Liste. Benennen Sie es in „PatientDataArea“ um.
  2. Ein neues Gruppensuchelement ist standardmäßig als erforderlich festgelegt. Wenn ein erforderliches Element nicht gefunden wird, tritt im Activity Editor ein Fehler auf und der Abgleich wird abgebrochen. Dieses Verhalten ermöglicht es, Aktivitäten zu überspringen, wenn sie für ein bestimmtes Dokument nicht geeignet sind. In diesem Tutorial erstellen wir jedoch eine Aktivität, um Daten aus allen eingehenden Dokumenten zu extrahieren, daher soll die Gruppe optional sein. Ändern Sie im Abschnitt Under what conditions den Wert Element is auf Optional.
  3. Wir möchten den Absatz finden, der den Namen und die Adresse des Patienten enthält. In deutschen Dokumenten befindet sich der gesuchte Absatz stets in dem Feld mit der Beschriftung „Name, Vorname …“. Wir müssen diesen Text auf dem Dokument finden und ihn als Referenz verwenden, um nach den Daten zu suchen, die wir extrahieren möchten. a. Schlüsselwörter können mit dem Suchelement Static Text gefunden werden. Klicken Sie auf Create Element und wählen Sie das Element Static Text aus der Dropdown-Liste. Benennen Sie es in „kwPatientTitle“ um. b. Geben Sie den Text „Name, Vorname“ in das Feld Text to find im Bereich Properties ein. c. Klicken Sie auf Match. Wenn die Verarbeitung abgeschlossen ist, sehen Sie unter dem Dokument den Tree of Hypotheses. Stellen Sie sicher, dass Advanced Designer den gewünschten statischen Text erfolgreich gefunden hat. Ein grüner Punkt neben dem Elementnamen zeigt an, dass ein entsprechendes Element auf dem Dokument erfolgreich gefunden wurde. Wenn Sie auf den Elementnamen im Tree of Hypotheses klicken, sehen Sie einen violetten Rahmen um den entsprechenden Bereich auf dem Dokument.
Wenn ein element nicht gefunden wurde, sehen Sie einen orangefarbenen Punkt neben seinem Namen und einen orangefarbenen Rahmen um das Dokumentbild. Beachten Sie, dass die Hypothesengüte eines Elements den Zustand der nachfolgenden Elemente in der Kette und die Gesamtqualität einer Kette beeinflusst. Detaillierte Informationen zur Hypothesengüte finden Sie in der Dokumentation.
  1. Finden wir nun die untere Begrenzung der Zelle, die den Namen und die Adresse des Patienten enthält. Dafür verwenden wir ein Separator-Element.
    a. Fügen Sie der Gruppe ein Separator-Element hinzu und nennen Sie es “SeparatorBottom”. Setzen Sie die Mindestlänge auf 200.
    b. Klicken Sie mit der rechten Maustaste auf das Element und wählen Sie im Kontextmenü Match Element. Sie werden sehen, dass der Tree of Hypotheses viele grüne Punkte enthält. Diese entsprechen verschiedenen Separatoren, die den Suchkriterien entsprechen. Sie können auf jeden Punkt klicken, um das zugehörige Objekt im Bild anzuzeigen.
    c. Um die Suchkriterien einzugrenzen, geben Sie den Suchbereich für den Separator an. Klicken Sie auf Match, um das Element “kwPatientTitle” zu finden, das als Ankerelement verwendet wird. Im Abschnitt Where to search des Bereichs Properties klicken Sie auf Draw on Image. Wählen Sie im Dokument das Element “kwPatientTitle” aus und klicken Sie auf das Symbol mit dem Abwärtspfeil, um den Suchbereich unterhalb des Schlüsselworts sowie das Symbol für das nächstgelegene Objekt festzulegen, damit der dem Schlüsselwort nächstgelegene Separator gefunden wird. Eine ausführliche Beschreibung der Ankerelemente finden Sie in der Dokumentation.
    d. Klicken Sie auf Match und prüfen Sie, ob Advanced Designer den Separator unterhalb des Elements “kwPatientTitle” gefunden hat. Sie können die Hypothese für jedes Element prüfen, indem Sie im Abschnitt Tree of Hypotheses auf seinen Namen klicken.
  2. Eine Beschriftung und ein Separator sind zuverlässige Referenzelemente für die Daten des Patienten. Ist jedoch die Druckqualität zu gering, kann es sein, dass der Text der Beschriftung nicht erkannt wird oder der Separator nicht gefunden wird. Um gute Extraktionsergebnisse sicherzustellen, suchen wir nach einem Absatz, der zwischen der Beschriftung und dem Separator liegt. Ein Absatz ist ein einheitlicher Textblock und kann daher auch dann erfolgreich gefunden werden, wenn einige der Begrenzungselemente nicht gefunden wurden.
    a. Erstellen Sie ein Paragraph-Suchelement und nennen Sie es “NameAddressParagraph”.
    b. Ändern Sie Text alignment auf Left.
    c. Die Daten des Patienten umfassen zwei bis fünf Zeilen, daher geben Sie Line count von 2 bis 5 an.
    d. Geben Sie den Suchbereich für den Absatz an. Dieses Mal sollten Sie das Menü Add im Abschnitt Where to search verwenden. Das Element sollte sich unterhalb des Elements “kwPatientTitle” und oberhalb des Elements “SeparatorBottom” befinden.
    e. Klicken Sie auf Match.
  3. Nun möchten wir die Daten des Patienten extrahieren. Erstellen Sie ein neues Gruppenelement mit dem Namen “PatientGroup”.
  4. Der Name des Patienten kann eine oder zwei Zeilen umfassen. Um mehrere Instanzen eines Elements zu erfassen, verwenden wir eine wiederholbare Gruppe.
    a. Erstellen Sie ein Repeating Group-Suchelement und nennen Sie es “NameGroup”. Geben Sie 2 als maximale Anzahl von Wiederholungen an. Machen Sie das Element optional.
    b. Wir möchten nach den Zeilen suchen, die Teil des Absatzes “NameAddressParagraph” sind. Um die Region des Elements als Suchbereich festzulegen, klicken Sie auf das Code-Editor-Symbol unter dem Dokumentbild und fügen Sie das folgende Skript in den Abschnitt Search Conditions des Code Editor ein:
RSA:PatientDataArea.NameAddressParagraph.Rect;
c. Erstellen Sie innerhalb der wiederholbaren Gruppe ein Character String-Element, das zum Erfassen einer Zeichenzeile vorgesehen ist. Nennen Sie es “NameLine”.
d. Der gesuchte Text kann Groß- und Kleinbuchstaben sowie eine Reihe von Satzzeichen enthalten, die in Namen vorkommen können. Konfigurieren Sie zwei separate Zeichensätze. Der erste Satz sollte alle lateinischen Groß- und Kleinbuchstaben enthalten. Um Zeichen mit diakritischen Zeichen hinzuzufügen, ändern Sie den Unicode-Teilbereich oder fügen Sie die Zeichen direkt in das Feld Selected characters ein.
e. Der andere Satz sollte die folgenden Satzzeichen enthalten: ,-.()’. Wir möchten nicht, dass die Zeichenfolge nur Satzzeichen enthält, daher setzen Sie Portion in text, % für den zweiten Satz auf 40 %. Diese Eigenschaft definiert den maximal zulässigen Prozentsatz von Zeichen aus einem bestimmten Satz.
Die Standardeinstellungen erlauben, dass die Zeichenfolge bis zu 30 % Zeichen enthält, die in keinem Satz enthalten sind. Dies hilft, Zeichenfolgen zu finden, selbst wenn einige Zeichen falsch erkannt werden oder nicht im Satz enthalten sind (z. B. Zeichen mit diakritischen Zeichen). Sie können diese Einstellung anpassen, indem Sie den Wert Allowed errors im Bereich Properties ändern.
f. Deaktivieren Sie die Option Search for parts of words.
g. Geben Sie den Suchbereich für das Element “NameLine” an: unterhalb des Elements “kwPatientTitle” und möglichst nah daran.
h. Klicken Sie auf Match und überprüfen Sie den Tree of Hypotheses. Sie werden sehen, dass zwei Zeichenfolgen gefunden werden. Allerdings enthält die zweite Zeichenfolge die Adresse des Patienten.
i. Um die Adresse aus den Suchergebnissen auszuschließen, prüfen wir, ob die erste Zeichenfolge sowohl den Vor- als auch den Nachnamen enthält. Dies kann durch Hinzufügen einer einfachen Skript-Suchbedingung erfolgen. Wählen Sie das Suchelement “NameLine” aus und öffnen Sie den Code-Editor Search Conditions.
j. Wir gehen davon aus, dass die erste Zeile einen vollständigen Namen enthält, wenn sie ein Komma und ein Leerzeichen enthält. Wenn sie einen vollständigen Namen enthält, möchten wir nicht nach einem zweiten Vorkommen der wiederholbaren Gruppe suchen. Fügen Sie das folgende Skript in den Editor ein:
if (NameGroup.HasInstances and LastFound.NameLine.Value.Find(", ") > 0) then DontFind;
k. Klicken Sie auf Match und stellen Sie sicher, dass der Name korrekt gefunden wird.
  1. Der in Schritt 7 extrahierte Name des Patienten wird dem Feld “Name” zugeordnet. Wir werden außerdem die Adresse des Patienten extrahieren und zuordnen.
    a. Erstellen Sie innerhalb der “PatientGroup” ein Suchelement vom Typ Character String mit dem Namen “Address” und derselben Zeichensatzkonfiguration wie das Element “NameLine”.
    b. Geben Sie den Suchbereich für das Element per Code an: Die Adresse muss sich unterhalb der “NameLine” oder – falls dieses Element nicht gefunden wurde – unterhalb der ersten Zeile des Elements “NameAddressParagraph” befinden.
RSA: PatientDataArea.NameAddressParagraph.Rect;
if NameGroup.HasInstances then
  RSA.Top: Max(RSA.Top, LastFound.NameLine.Rect.Bottom);
else
  RSA.Top: PatientDataArea.NameAddressParagraph.Lines[0].Rect.Bottom;
c. Deaktivieren Sie die Option Search for parts of words.
d. Klicken Sie auf Match.
So sollte die Struktur des Suchelements aussehen: AD_Tutorial_DE_Patient_Structure
  1. Öffnen Sie den Dialog Manage Fields, erstellen Sie die entsprechenden Felder und ordnen Sie sie den Suchelementen wie folgt zu:
NameTypSuchelement
NameTextfeld in der “Patient”-GruppeNameLine
AddressTextfeld in der “Patient”-GruppeAddress
  1. Löschen Sie die Suchelemente, die automatisch für die neuen Felder erstellt wurden.

Extrahieren des Typs der Arbeitsunfähigkeitsbescheinigung

Das Feld für den Typ der Arbeitsunfähigkeitsbescheinigung hat zwei Kontrollkästchen. Sie sind mit „Erstbescheinigung“ und „Folgebescheinigung“ beschriftet. Die Aufgabe besteht darin, die Beschriftungen zu finden und dann zu prüfen, ob daneben ausgefüllte Häkchen vorhanden sind.
  1. Erstellen Sie ein Group-Element mit dem Namen “TypeOfSickNoteGroup”. Machen Sie das Element optional.
  2. Um die Informationen zu beiden Häkchen zu speichern, erstellen Sie ein Repeating Group-Suchelement und nennen Sie es “PrimaryGroup”.
    a. Es empfiehlt sich, den Suchbereich für die Elementgruppe einzuschränken. Geben Sie den Suchbereich per Code an: rechts vom Element “PatientGroup” und oberhalb des Elements “DoctorAreaGroup” (das später erstellt wird). **Hinweis: **Geben Sie immer die Bedingung “Exists” an, wenn Sie später definierte Elemente verwenden.
if PatientGroup.Exists then RSA.Left: PatientGroup.NameGroup.NameLine.Rect.Right;
if DoctorAreaGroup.Exists then RSA.Bottom: DoctorAreaGroup.DataArea.SeparatorTop.Rect.Top;
b. Erstellen Sie ein Static Text-Suchelement mit dem Namen “kwPrimary” (zu suchender Text: “Erstbescheinigung”) und legen Sie es als erforderlich fest.
c. Erstellen Sie ein Object Collection-Suchelement mit dem Namen “Checkmark” mit den folgenden Einstellungen: Type: Checkmark, Checkmark state: Checked, Minimum height: 10, Maximum width: 20, Maximum height: 20. Geben Sie an, dass sich das Element links vom Element “kwPrimary” befindet und ihm am nächsten ist.
d. Klicken Sie auf Match.
  1. Kopieren Sie die Gruppe “PrimaryGroup” und fügen Sie sie ein. Benennen Sie die kopierte Gruppe in “SecondaryGroup” um. Diese Gruppe ist erforderlich.
  2. Bearbeiten Sie die “SecondaryGroup”.
    a. Benennen Sie das Element “kwPrimary” in “kwSecondary” um und setzen Sie den zu suchenden Text auf “Folgebescheinigung”. Geben Sie als Suchbereich den Bereich unterhalb des Elements “kwPrimary” aus der “PrimaryGroup” an.
    b. Geben Sie den Suchbereich für das Element “Checkmark” an: links von “kwSecondary” und ihm am nächsten.
    c. Das Object Collection-Suchelement findet eine Sammlung aller geeigneten Objekte innerhalb des Suchbereichs. Wenn sich die Häkchen in derselben Zeile befinden, kann das Element “Checkmark” der “SecondaryGroup” auch das primäre Häkchen finden. Um dies zu vermeiden, schließen Sie das primäre Häkchen (Element “Checkmark” der “PrimaryGroup”) aus dem Suchbereich für das Element “Checkmark” aus der “SecondaryGroup” aus.
    d. Klicken Sie auf Match.
So sollte die Struktur des Suchelements aussehen: AD_Tutorial_DE_TypeOfSickNote_Structure
  1. Öffnen Sie das Fenster Manage Fields, erstellen Sie die entsprechenden Felder und ordnen Sie sie den Suchelementen wie folgt zu:
NameTypSuchelement
Type of Sick NoteCheckmark group
PrimaryCheckmark in der Checkmark group “Type of Sick Note”PrimaryGroup -> Checkmark
SecondaryCheckmark in der Checkmark group “Type of Sick Note”SecondaryGroup -> Checkmark
  1. Löschen Sie die Suchelemente, die automatisch für die neuen Felder erstellt wurden.

Extrahieren der Arztdaten

Wir müssen nun den letzten Datenblock auf diesen Dokumenten verarbeiten. Er enthält die Arztdaten und die Unterschrift. Zuerst suchen wir den Kasten, der die Daten enthält, und extrahieren dann einen Absatz mit den Arztinformationen sowie einen Bildbereich mit der Unterschrift.
  1. Erstellen Sie ein Group-Element mit dem Namen “DoctorAreaGroup”. Machen Sie das Element optional.
  2. Der Kasten, nach dem wir suchen, enthält eine Beschriftung. Um ihn zu finden, erstellen Sie ein Static Text-Element namens “kwDoctorTitle” (zu suchender Text: “Unterschrift des Arztes”).
  3. Erstellen Sie innerhalb der Gruppe “DoctorAreaGroup” eine weitere Gruppe mit dem Namen “DataArea”.
  4. Der Kasten, der die Arztinformationen und die Unterschrift enthält, wird durch eine Kombination aus vier Trennlinien begrenzt. Sie befinden sich rund um das Element “kwDoctorTitle”. Wir sollten die Elemente jedoch so konfigurieren, dass das Programm sie auch dann finden kann, wenn das Element “kwDoctorTitle” nicht gefunden wurde. Erstellen Sie in der Gruppe “DataArea” vier Separator-Such­elemente mit den folgenden Eigenschaften:
NameAusrichtungMindestlängeSuchbereich
SeparatorRightVertikal180Rechts von “kwDoctorTitle”, dem rechten Seitenrand am nächsten
SeparatorLeftVertikal180Links von “kwDoctorTitle”, links von “SeparatorRight” (falls “kwDoctorTitle” nicht gefunden wurde), “SeparatorRight” am nächsten, unterhalb von “SeparatorRight” (klicken Sie auf das Symbol rechts neben dem Trennliniennamen und wählen Sie Top Boundary of Region), “SeparatorRight” ausschließen
SeparatorBottomHorizontal200Unterhalb von “kwDoctorTitle” (mit einer Anpassung von -10 Punkten), rechts von “SeparatorLeft”, links von “SeparatorRight”, dem unteren Seitenrand am nächsten (diese Einstellung ist nützlich, falls “kwDoctorTitle” nicht gefunden wurde)
SeparatorTopHorizontal200Oberhalb von “kwDoctorTitle”, rechts von “SeparatorLeft”, “TypeOfSickNoteGroup” am nächsten, “SeparatorBottom” ausschließen
Sie sollten außerdem die Option Fits entirely within search area für alle diese Elemente deaktivieren.
  1. Wir könnten den Suchbereich für die Arztunterschrift und die Arztdaten manuell in Bezug auf die gefundenen Trennlinien angeben. Stattdessen erstellen wir ein Region-Element, das dem mit den Trennlinien begrenzten Bereich entspricht. Erstellen Sie ein Region-Suchelement mit dem Namen “BoxRegion” und geben Sie den Suchbereich an: links von “SeparatorRight”, rechts von “SeparatorLeft”, oberhalb von “SeparatorBottom” und unterhalb von “SeparatorTop”.
  2. Erstellen Sie eine neue Gruppe mit dem Namen “DoctorGroup”.
  3. Um die Arztunterschrift zu finden, erstellen Sie innerhalb der “DoctorGroup” ein Object Collection-Element mit den folgenden Einstellungen:
EigenschaftWert
NameSignature
TypePicture
Minimum width15
Minimum height15
Maximum width600
Maximum height350
Abschnitt Search Conditions im Code EditorDie Unterschrift kann teilweise außerhalb des Kastens liegen. Um das gesamte Bild zu finden, erweitern wir den Suchbereich in jede Richtung um 100 Punkte: RSA: DoctorAreaGroup.DataArea.BoxRegion.Rect.GetInflated(100dot,100dot);
  1. Um die Textinformationen im Kasten zu extrahieren, erstellen Sie ein Paragraph-Element mit den folgenden Einstellungen:
EigenschaftWert
NameDoctorInformation
Maximum line count6
SuchbereichOberhalb von “kwDoctorTitle”, “Signature” ausschließen
Abschnitt Search Conditions im Code EditorRSA: DoctorAreaGroup.DataArea.BoxRegion.Rect;
  1. Klicken Sie auf Match und stellen Sie sicher, dass die Elemente korrekt gefunden werden.
So sollte die Struktur der Suchelemente aussehen: AD_Tutorial_DE_Doctor_Structure
  1. Öffnen Sie den Dialog Manage Fields, erstellen Sie die entsprechenden Felder und ordnen Sie sie den Suchelementen wie folgt zu:
NameTypSuchelement
Doctor InformationText-Feld in der Gruppe “Doctor”DoctorInformation
SignatureBildfeld in der Gruppe “Doctor”Signature
  1. Löschen Sie die Suchelemente, die automatisch für die neuen Felder erstellt wurden.

Testen der Aktivität

Wir haben alle notwendigen Suchelemente und Felder konfiguriert. Wählen Sie alle Dokumente aus, klicken Sie auf Match, und wechseln Sie zur Registerkarte Felder, um die Feldbereiche auf den Dokumentbildern zu überprüfen. Beachten Sie, dass ein Bereich nur dann einem Feld zugeordnet wird, wenn er zur Hypothese des besten Pfads gehört. Sobald Sie mit den Ergebnissen zufrieden sind, klicken Sie auf das Kopiersymbol oberhalb des Dokumentbilds, um die vorhergesagten Labels in die Referenz-Labels zu kopieren.