Passer au contenu principal
Nous avons déjà commencé à extraire des données à partir des documents allemands ; nous allons donc d’abord configurer l’activité Extraction Rules pour ces documents.

Avant de commencer

  1. Ouvrez l’activité “Sick Note DE” dans l’Activity Editor.
  2. Sélectionnez l’un des documents de l’ensemble de documents.
  3. Assurez-vous que le mode avancé des propriétés de l’élément est activé. Pour activer ou désactiver ce mode, cliquez sur l’icône dans le volet Properties.
  4. Tous les documents téléchargés ont subi une préreconnaissance, et il est utile de voir quels objets ont été trouvés sur l’image. Cliquez sur l’icône. Si vous ne voyez pas cette icône en raison de la taille de votre écran, cliquez sur l’icône et sélectionnez Recognized Words. Les objets correspondants seront mis en évidence sur l’image du document. Vous pouvez basculer à tout moment entre différents types d’objets mis en évidence. Par exemple, passer à Recognized Lines peut être utile pour repérer des paragraphes, et passer à Separators facilitera la configuration d’un élément de recherche Separator.
  5. Si un élément de recherche se situe en dehors de la zone de recherche, il ne sera pas trouvé. Activez l’option Show search area dans le menu contextuel de l’image du document. La zone de recherche de chaque élément sera surlignée en vert lorsque vous évaluerez les résultats de Match.
Gardez à l’esprit qu’il peut être utile d’expérimenter les propriétés avancées des éléments de recherche pour améliorer la précision de l’extraction. Nous vous encourageons également à cliquer fréquemment sur Match pour vérifier le fonctionnement de vos règles d’extraction et comparer les résultats d’extraction sur différents documents de l’ensemble. Vous pouvez tester un seul élément sans relation avec les autres éléments en cliquant sur Match Element dans son menu contextuel. Dans ce cas, la qualité des hypothèses pour les éléments précédents n’affectera pas les résultats de Match.

Extraction des données du patient

Commençons par extraire les données manquantes du patient. Pour ce faire, nous devons créer plusieurs éléments de recherche. Nous recommandons de regrouper tous les éléments liés à une même entité. Les éléments sont mis en correspondance les uns après les autres, et le fait de ne pas trouver l’élément supérieur diminuera la qualité de l’hypothèse pour les éléments suivants. Dans le même temps, les groupes d’éléments de recherche sont traités indépendamment les uns des autres lors de la mise en correspondance, et une hypothèse distincte est formulée pour chaque groupe. Ainsi, vous pouvez contrôler la manière dont les éléments s’influencent mutuellement. Vous pouvez également évaluer d’un coup d’œil les résultats de la mise en correspondance en vérifiant si les éléments du groupe ont été trouvés avec succès. Enfin, le regroupement peut contribuer à réduire le temps de mise en correspondance.
  1. Cliquez sur Create Element et sélectionnez l’élément Group dans la liste déroulante. Renommez-le “PatientDataArea”.
  2. Un nouvel élément de recherche de groupe est, par défaut, défini comme requis. Si un élément requis n’est pas trouvé, l’Activity Editor génère une erreur et la mise en correspondance est interrompue. Ce scénario permet d’ignorer des activités si elles ne conviennent pas à un certain document. Cependant, dans ce tutoriel, nous créons une activité pour extraire des données de tous les documents entrants ; nous voulons donc que le groupe soit facultatif. Dans la section Under what conditions, définissez la valeur Element is sur Optional.
  3. Nous voulons extraire le paragraphe qui contient le nom et l’adresse du patient. Dans les documents allemands, le paragraphe que nous recherchons se trouve toujours dans le champ portant le libellé “Name, Vorname … ”. Nous devons trouver ce texte sur le document et l’utiliser comme point de référence pour rechercher les données que nous voulons extraire.
    a. Les mots-clés peuvent être trouvés à l’aide de l’élément de recherche Static Text. Cliquez sur Create Element et sélectionnez l’élément Static Text dans la liste déroulante. Renommez-le “kwPatientTitle”.
    b. Saisissez le texte “Name, Vorname” dans le champ Text to find du volet Propriétés.
    c. Cliquez sur Match. Une fois le traitement terminé, vous verrez l’Arbre des hypothèses sous le document. Assurez-vous qu’Advanced Designer a bien trouvé le texte statique souhaité. Un point vert à côté du nom de l’élément indique qu’un élément correspondant a bien été trouvé sur le document. Si vous cliquez sur le nom de l’élément dans l’Arbre des hypothèses, vous verrez un cadre violet autour de la zone correspondante sur le document.
Si un élément n’a pas été trouvé, vous verrez un point orange à côté de son nom et un cadre orange autour de l’image du document. Gardez à l’esprit que la qualité de l’hypothèse d’un élément affecte l’état des éléments suivants dans la chaîne ainsi que la qualité globale de la chaîne. Vous trouverez des informations détaillées sur la qualité des hypothèses dans la documentation.
  1. Nous allons maintenant trouver la limite inférieure de la cellule qui contient le nom et l’adresse du patient. Pour cela, nous utiliserons un élément Separator.
    a. Ajoutez un élément Separator au groupe et appelez-le “SeparatorBottom”. Définissez sa longueur minimale sur 200.
    b. Cliquez avec le bouton droit sur l’élément et sélectionnez Match Element dans le menu contextuel. Vous verrez que l’Arbre des hypothèses contient de nombreux points verts. Ils correspondent à différents séparateurs qui répondent aux critères de recherche. Vous pouvez cliquer sur chaque point pour voir l’objet correspondant sur l’image.
    c. Pour affiner les critères de recherche, spécifiez la zone de recherche du séparateur. Cliquez sur Match afin de trouver l’élément “kwPatientTitle” qui sera utilisé comme élément d’ancrage. Dans la section Where to search du volet Propriétés, cliquez sur Draw on Image. Sélectionnez l’élément “kwPatientTitle” sur le document et cliquez sur l’icône de flèche vers le bas pour définir la zone de recherche sous le mot-clé, puis sur l’icône la plus proche afin de rechercher le séparateur le plus proche du mot-clé. Vous trouverez une description détaillée des éléments d’ancrage dans la documentation.
    d. Cliquez sur Match et vérifiez qu’Advanced Designer a trouvé le séparateur sous l’élément “kwPatientTitle”. Vous pouvez vérifier l’hypothèse de chaque élément en cliquant sur son nom dans la section Arbre des hypothèses.
  2. Un libellé et un séparateur sont des éléments de référence fiables pour les données du patient. Cependant, si la qualité d’impression est trop faible, il est possible que le texte du libellé ne soit pas reconnu ou que le séparateur ne soit pas trouvé. Pour garantir de bons résultats d’extraction, nous allons rechercher un paragraphe situé entre le libellé et le séparateur. Un paragraphe est un bloc de texte uniforme, ce qui signifie qu’il peut être trouvé avec succès même si certains des éléments de délimitation n’ont pas été trouvés.
    a. Créez un élément de recherche Paragraph et appelez-le “NameAddressParagraph”.
    b. Définissez Text alignment sur Left.
    c. Les données du patient occupent de deux à cinq lignes ; spécifiez donc Line count de 2 à 5.
    d. Spécifiez la zone de recherche du paragraphe. Cette fois, vous devez utiliser le menu Add dans la section Where to search. L’élément doit être situé sous l’élément “kwPatientTitle” et au-dessus de l’élément “SeparatorBottom”.
    e. Cliquez sur Match.
  3. Nous voulons maintenant extraire les données du patient. Créez un nouvel élément de groupe appelé “PatientGroup”.
  4. Le nom du patient peut occuper une ou deux lignes. Pour capturer plusieurs occurrences d’un élément, nous utiliserons un groupe répétitif.
    a. Créez un élément de recherche Repeating Group et appelez-le “NameGroup”. Indiquez 2 comme nombre maximal de répétitions. Rendez l’élément facultatif.
    b. Nous voulons rechercher les lignes qui font partie du paragraphe “NameAddressParagraph”. Pour spécifier la région de l’élément comme zone de recherche, cliquez sur l’icône de l’éditeur de code sous l’image du document et collez le script suivant dans la section Search Conditions du Code Editor :
RSA:PatientDataArea.NameAddressParagraph.Rect;
c. À l’intérieur du groupe répétitif, créez un élément Character String conçu pour capturer une ligne de caractères. Appelez-le “NameLine”.
d. Le texte que nous recherchons peut contenir des lettres majuscules et minuscules, ainsi qu’un ensemble de signes de ponctuation susceptibles d’apparaître dans les noms. Configurez deux jeux de caractères distincts. Le premier jeu doit contenir toutes les lettres latines majuscules et minuscules. Pour ajouter des caractères avec des signes diacritiques, modifiez la sous-plage Unicode ou collez directement les caractères dans le champ Selected characters.
e. L’autre jeu doit contenir les signes de ponctuation suivants : ,-.()’. Nous ne voulons pas que la chaîne contienne uniquement des signes de ponctuation ; définissez donc Portion in text, % à 40 % pour le deuxième jeu. Cette propriété définit le pourcentage maximal autorisé de caractères provenant d’un jeu donné.
Les paramètres par défaut permettent à la chaîne de contenir jusqu’à 30 % de caractères qui ne sont inclus dans aucun jeu. Cela aide à trouver des chaînes même lorsque certains caractères sont reconnus incorrectement ou ne sont pas inclus dans le jeu (par exemple, des caractères avec signes diacritiques). Vous pouvez ajuster ce paramètre en modifiant la valeur Allowed errors dans le volet Propriétés.
f. Désactivez l’option Search for parts of words.
g. Spécifiez la zone de recherche pour l’élément “NameLine” : sous l’élément “kwPatientTitle” et au plus près de celui-ci.
h. Cliquez sur Match et examinez l’Arbre des hypothèses. Vous verrez que deux chaînes de caractères sont trouvées. Cependant, la deuxième chaîne contient l’adresse du patient.
i. Pour exclure l’adresse des résultats de recherche, nous allons vérifier si la première chaîne contient à la fois le prénom et le nom. Pour cela, nous pouvons ajouter une simple condition de recherche sous forme de script. Sélectionnez l’élément de recherche “NameLine” et ouvrez l’éditeur de code Search Conditions.
j. Nous supposons que la première ligne contient un nom complet si elle contient une virgule et un espace. Si elle contient un nom complet, nous ne voulons pas rechercher une deuxième occurrence du groupe répétitif. Collez le script suivant dans l’éditeur :
if (NameGroup.HasInstances and LastFound.NameLine.Value.Find(", ") > 0) then DontFind;
k. Cliquez sur Match et assurez-vous que le nom est trouvé correctement.
  1. Le nom du patient extrait à l’étape 7 sera mappé au champ “Name”. Nous allons également extraire et mapper l’adresse du patient.
    a. Dans le “PatientGroup”, créez un élément de recherche Character String appelé “Address” avec la même configuration de jeu de caractères que l’élément “NameLine”.
    b. Spécifiez la zone de recherche de l’élément à l’aide du code : l’adresse doit être située sous “NameLine” ou, si cet élément n’a pas été trouvé, sous la première ligne de l’élément “NameAddressParagraph”.
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. Désactivez l’option Search for parts of words.
d. Cliquez sur Match.
Voici à quoi doit ressembler la structure de l’élément de recherche : AD_Tutorial_DE_Patient_Structure
  1. Ouvrez la boîte de dialogue Manage Fields, créez les champs correspondants et mappez-les aux éléments de recherche comme suit :
NameTypeSearch element
NameChamp de texte dans le groupe “Patient”NameLine
AddressChamp de texte dans le groupe “Patient”Address
  1. Supprimez les éléments de recherche qui ont été créés automatiquement pour les nouveaux champs.

Extraction du type d’arrêt maladie

Le champ du type d’arrêt maladie comporte deux cases à cocher. Elles sont libellées comme “Erstbescheinigung” et “Folgebescheinigung”. La tâche consiste à trouver les libellés, puis à vérifier s’il y a des cases à cocher cochées à côté.
  1. Créez un élément Group appelé “TypeOfSickNoteGroup”. Rendez l’élément facultatif.
  2. Pour stocker les informations sur les deux cases à cocher, créez un élément de recherche Repeating Group et appelez-le “PrimaryGroup”.
    a. C’est une bonne idée de restreindre la zone de recherche pour le groupe d’éléments. Spécifiez la zone de recherche à l’aide du code : à droite de l’élément “PatientGroup” et au-dessus de l’élément “DoctorAreaGroup” (qui sera créé plus tard). **Remarque : **spécifiez toujours la condition “Exists” lorsque vous utilisez de futurs éléments.
if PatientGroup.Exists then RSA.Left: PatientGroup.NameGroup.NameLine.Rect.Right;
if DoctorAreaGroup.Exists then RSA.Bottom: DoctorAreaGroup.DataArea.SeparatorTop.Rect.Top;
b. Créez un élément de recherche Static Text appelé “kwPrimary” (texte à trouver : “Erstbescheinigung”) et rendez-le requis.
c. Créez un élément de recherche Object Collection appelé “Checkmark” avec les paramètres suivants : Type : Checkmark, Checkmark state : Checked, Minimum height : 10, Maximum width : 20, Maximum height : 20. Spécifiez que l’élément se trouve à gauche de l’élément “kwPrimary” et au plus près de celui-ci.
d. Cliquez sur Match.
  1. Copiez et collez le groupe “PrimaryGroup”. Renommez le groupe copié en “SecondaryGroup”. Ce groupe sera requis.
  2. Modifiez le “SecondaryGroup”.
    a. Renommez l’élément “kwPrimary” en “kwSecondary” et définissez le texte à trouver sur “Folgebescheinigung”. Spécifiez la zone de recherche : sous l’élément “kwPrimary” du “PrimaryGroup”.
    b. Spécifiez la zone de recherche pour l’élément “Checkmark” : à gauche de “kwSecondary” et au plus près de celui-ci.
    c. L’élément de recherche Object Collection trouve un ensemble de tous les objets appropriés dans la zone de recherche. Si les cases à cocher sont situées sur la même ligne, l’élément “Checkmark” du “SecondaryGroup” peut également trouver la case à cocher principale. Pour éviter cela, excluez la case à cocher principale (élément “Checkmark” du “PrimaryGroup”) de la zone de recherche de l’élément “Checkmark” du “SecondaryGroup”.
    d. Cliquez sur Match.
This is how the search element structure should look: AD_Tutorial_DE_TypeOfSickNote_Structure
  1. Ouvrez la fenêtre Manage Fields, créez les champs correspondants et mappez-les aux éléments de recherche comme suit :
NameTypeSearch element
Type of Sick NoteGroupe de cases à cocher
PrimaryCase à cocher dans le groupe de cases à cocher “Type of Sick Note”PrimaryGroup -> Checkmark
SecondaryCase à cocher dans le groupe de cases à cocher “Type of Sick Note”SecondaryGroup -> Checkmark
  1. Supprimez les éléments de recherche qui ont été créés automatiquement pour les nouveaux champs.

Extraction des données du médecin

Nous devons maintenant traiter le dernier bloc de données sur ces documents. Il contient les données et la signature du médecin. Nous allons d’abord trouver la zone qui contient les données, puis extraire un paragraphe avec les informations du médecin et une région d’image contenant la signature.
  1. Créez un élément Group nommé “DoctorAreaGroup”. Définissez cet élément comme facultatif.
  2. La zone que nous allons rechercher contient un libellé. Pour le trouver, créez un élément Static Text nommé “kwDoctorTitle” (texte à rechercher : “Unterschrift des Arztes”).
  3. À l’intérieur du groupe “DoctorAreaGroup”, créez un autre groupe nommé “DataArea”.
  4. La zone qui contient les informations et la signature du médecin est formée d’une combinaison de quatre séparateurs. Ils se trouvent autour de l’élément “kwDoctorTitle”. Cependant, nous devons configurer les éléments de manière à permettre au programme de les trouver même si l’élément “kwDoctorTitle” n’a pas été trouvé. Dans le groupe “DataArea”, créez quatre éléments de recherche Separator avec les propriétés suivantes :
NameOrientationLongueur minimaleZone de recherche
SeparatorRightVertical180À droite de “kwDoctorTitle”, le plus proche du bord droit de la Page
SeparatorLeftVertical180À gauche de “kwDoctorTitle”, à gauche de “SeparatorRight” (au cas où “kwDoctorTitle” n’aurait pas été trouvé), le plus proche de “SeparatorRight”, en dessous de “SeparatorRight” (cliquez sur l’icône à droite du nom du séparateur et sélectionnez Top Boundary of Region), Exclure “SeparatorRight”
SeparatorBottomHorizontal200En dessous de “kwDoctorTitle” (avec un ajustement de -10 points), à droite de “SeparatorLeft”, à gauche de “SeparatorRight”, le plus proche du bord inférieur de la Page (ce paramètre sera utile au cas où “kwDoctorTitle” n’aurait pas été trouvé)
SeparatorTopHorizontal200Au-dessus de “kwDoctorTitle”, à droite de “SeparatorLeft”, le plus proche de “TypeOfSickNoteGroup”, Exclure “SeparatorBottom”
Vous devez également désactiver l’option Fits entirely within search area pour tous ces éléments.
  1. Nous pourrions spécifier manuellement la zone de recherche pour la signature et les informations du médecin par rapport aux séparateurs trouvés. Au lieu de cela, nous allons créer un élément Region correspondant à la zone délimitée par les séparateurs. Créez un élément de recherche Region nommé “BoxRegion” et définissez la zone de recherche : à gauche de “SeparatorRight”, à droite de “SeparatorLeft”, au-dessus de “SeparatorBottom” et en dessous de “SeparatorTop”.
  2. Créez un nouveau groupe nommé “DoctorGroup”.
  3. Pour localiser la signature du médecin, créez un élément Object Collection avec les paramètres suivants à l’intérieur de “DoctorGroup” :
PropertyValue
NameSignature
TypePicture
Minimum width15
Minimum height15
Maximum width600
Maximum height350
Search Conditions section of the Code EditorLa signature peut être partiellement située en dehors de la zone. Pour trouver l’image complète, nous allons agrandir la zone de recherche de 100 points dans chaque direction : RSA: DoctorAreaGroup.DataArea.BoxRegion.Rect.GetInflated(100dot,100dot);
  1. Pour extraire les informations textuelles de la zone, créez un élément Paragraph avec les paramètres suivants :
PropertyValue
NameDoctorInformation
Maximum line count6
Search areaAu-dessus de “kwDoctorTitle”, Exclure “Signature”
Search Conditions section of the Code EditorRSA: DoctorAreaGroup.DataArea.BoxRegion.Rect;
  1. Cliquez sur Match et assurez-vous que les éléments sont trouvés correctement.
Voici à quoi doit ressembler la structure des éléments de recherche : AD_Tutorial_DE_Doctor_Structure
  1. Ouvrez la boîte de dialogue Manage Fields, créez les champs correspondants et mappez-les aux éléments de recherche comme suit :
NameTypeSearch element
Doctor Informationchamp de Text dans le groupe “Doctor”DoctorInformation
Signaturechamp image dans le groupe “Doctor”Signature
  1. Supprimez les éléments de recherche qui ont été créés automatiquement pour les nouveaux champs.

Tester l’activité

Nous avons configuré tous les éléments de recherche et les champs nécessaires. Sélectionnez tous les documents, cliquez sur Associer, puis passez à l’onglet Champs pour examiner les régions de champ sur les images du document. Gardez à l’esprit qu’une région n’est transmise à un champ que si elle appartient à l’hypothèse du meilleur chemin. Une fois satisfait des résultats, cliquez sur l’icône de copie au-dessus de l’image du document pour copier l’étiquetage prédit vers l’étiquetage de référence.