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

Étapes préparatoires

  1. Ouvrez l’activité “Sick Note DE” dans l’Éditeur d’activité.
  2. Sélectionnez l’un des documents de l’ensemble.
  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 Propriétés.
  4. Tous les documents importés ont été préreconnus, 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 Mots reconnus. 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 à Lignes reconnues peut être utile pour repérer des paragraphes, et passer à Séparateurs 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 Afficher la zone de recherche 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 correspondance.
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 d’extraction. Nous vous encourageons également à cliquer fréquemment sur Correspondance 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, indépendamment des autres, en cliquant sur Correspondance de l’élément 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 correspondance.

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 l’absence de l’élément situé en tête de chaîne réduira la qualité de l’hypothèse pour les éléments suivants. En parallèle, 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. 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 type groupe est, par défaut, défini comme requis. Si un élément requis n’est pas trouvé, l’Activity Editor rencontre une erreur et la mise en correspondance est interrompue. Ce fonctionnement permet d’ignorer des activités si elles ne sont pas adaptées à un document donné. Toutefois, dans ce didacticiel, nous créons une activité pour extraire des données de tous les documents entrants ; nous souhaitons donc que le groupe soit facultatif. Dans la section Under what conditions, définissez Element is sur Optional.
  3. Nous voulons extraire le paragraphe qui contient le nom et l’adresse du patient. Dans les documents en allemand, le paragraphe recherché se trouve toujours dans le champ portant l’étiquette “Name, Vorname … ”. Nous devons repérer ce texte dans le document et l’utiliser comme point d’ancrage pour rechercher les données à extraire.
    a. Les mots-clés peuvent être détecté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 Properties.
    c. Cliquez sur Match. Une fois le traitement terminé, vous verrez le Tree of Hypotheses sous le document. Assurez-vous que 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é dans le document. Si vous cliquez sur le nom de l’élément dans le Tree of Hypotheses, une bordure violette encadrera la zone correspondante dans le document.
Remarque : Si un élément n’a pas été trouvé, un point orange s’affiche à côté de son nom et un cadre orange entoure l’image du document. Gardez à l’esprit que la qualité de l’hypothèse d’un élément influence l’état des éléments suivants dans la chaîne ainsi que la qualité globale de celle-ci. Vous trouverez des informations détaillées sur la qualité des hypothèses dans la documentation.
  1. Nous allons maintenant repérer 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 nommez-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 pour trouver l’élément « kwPatientTitle » qui servira d’élément d’ancrage. Dans la section Where to search du panneau Properties, cliquez sur Draw on Image. Sélectionnez l’élément « kwPatientTitle » dans 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é et 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 que Advanced Designer a trouvé le séparateur sous l’élément « kwPatientTitle ». Vous pouvez vérifier l’hypothèse pour chaque élément en cliquant sur son nom dans la section Arbre des hypothèses.
  2. Une étiquette 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 de l’étiquette ne soit pas reconnu ou que le séparateur ne soit pas détecté. Pour garantir de bons résultats d’extraction, nous allons rechercher un paragraphe situé entre l’étiquette et le séparateur. Un paragraphe est un bloc de texte homogène, ce qui signifie qu’il peut être trouvé même si certains éléments de délimitation n’ont pas été détectés.
    a. Créez un élément de recherche Paragraph et nommez-le « NameAddressParagraph ».
    b. Modifiez Text alignment en Left.
    c. Les données du patient s’étendent sur deux à cinq lignes ; spécifiez donc le Line count de 2 à 5.
    d. Spécifiez la zone de recherche pour le paragraphe. Cette fois, utilisez 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 nommé « PatientGroup ».
  4. Le nom du patient peut occuper une ou deux lignes. Pour capturer plusieurs instances d’un élément, nous utiliserons un groupe répétitif.
    a. Créez un élément de recherche Repeating Group et nommez-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 définir 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 Chaîne de caractères conçu pour capturer une ligne de caractères. Nommez-le « NameLine ».
d. Le texte recherché peut contenir des lettres majuscules et minuscules, ainsi qu’un ensemble de signes de ponctuation susceptibles d’apparaître dans des noms. Configurez deux jeux de caractères distincts. Le premier 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 Caractères sélectionnés.
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 la Part dans le texte, % pour le deuxième jeu à 40 %. Cette propriété définit le pourcentage maximal autorisé de caractères issus d’un jeu donné.
Remarque : Les paramètres par défaut permettent à la chaîne de contenir jusqu’à 30 % de caractères n’appartenant à aucun jeu. Cela aide à trouver des chaînes même lorsque certains caractères sont mal reconnus 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 Erreurs autorisées dans le panneau Propriétés. f. Désactivez l’option Search for parts of words.
g. Indiquez 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’Arborescence des hypothèses. Vous constaterez que deux chaînes de caractères sont trouvées. Cependant, la seconde chaîne contient l’adresse du patient.
i. Pour exclure l’adresse des résultats, nous allons vérifier si la première chaîne contient à la fois le prénom et le nom. Cela peut être fait en ajoutant une simple condition de recherche par script. Sélectionnez l’élément de recherche « NameLine » et ouvrez l’éditeur de code Search Conditions.
j. Nous considérons que la première ligne contient un nom complet si elle comprend une virgule et un espace. Si c’est 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 vérifiez 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. À l’intérieur de “PatientGroup”, créez un élément de recherche Character String nommé “Address” avec la même configuration d’ensemble de caractères que l’élément “NameLine”.
    b. Spécifiez la zone de recherche de l’élément par code : l’adresse doit se situer 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 Rechercher des parties de mots. d. Cliquez sur Correspondance. Voici à quoi la structure de l’élément de recherche doit ressembler : AD_Tutorial_DE_Patient_Structure
  1. Ouvrez la boîte de dialogue Gérer les champs, créez les champs correspondants et associez-les aux éléments de recherche comme suit :
NomTypeÉlément de recherche
NameChamp Text dans le groupe “Patient”NameLine
AddressChamp Text dans le groupe “Patient”Address
  1. Supprimez les éléments de recherche qui ont été automatiquement créés pour les nouveaux champs.

Extraction du type d’arrêt maladie

Le champ « type d’arrêt maladie » comporte deux cases à cocher, étiquetées « Erstbescheinigung » et « Folgebescheinigung ». La tâche consiste à repérer ces libellés, puis à vérifier si des coches pleines figurent à côté.
  1. Créez un élément Group nommé « TypeOfSickNoteGroup ». Rendez cet élément facultatif.
  2. Pour stocker les informations des deux coches, créez un élément de recherche Repeating Group et nommez-le « PrimaryGroup ».
    a. Il est judicieux de restreindre la zone de recherche pour le groupe d’éléments. Spécifiez-la en code : à droite de l’élément « PatientGroup » et au-dessus de l’élément « DoctorAreaGroup » (qui sera créé ultérieurement). Remarque : indiquez toujours la condition « Exists » lorsque vous faites référence à des éléments futurs.
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 nommé « kwPrimary » (texte à rechercher : « Erstbescheinigung ») et définissez-le comme obligatoire.
c. Créez un élément de recherche Object Collection nommé « Checkmark » avec les paramètres suivants : Type : Checkmark, État de la coche : Checked, Hauteur minimale : 10, Largeur maximale : 20, Hauteur maximale : 20. Indiquez que l’élément est situé à gauche de l’élément « kwPrimary » et au plus près de celui-ci.
d. Cliquez sur Match.
  1. Copiez-collez le groupe « PrimaryGroup ». Renommez le groupe copié en « SecondaryGroup ». Ce groupe sera obligatoire.
  2. Modifiez « SecondaryGroup ».
    a. Renommez l’élément « kwPrimary » en « kwSecondary » et définissez le texte à rechercher 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 retourne une collection de tous les objets correspondant aux critères dans la zone de recherche. Si les coches se trouvent sur la même ligne, l’élément « Checkmark » de « SecondaryGroup » peut aussi repérer la coche primaire. Pour éviter cela, excluez la coche primaire (élément « Checkmark » de « PrimaryGroup ») de la zone de recherche de l’élément « Checkmark » de « SecondaryGroup ».
    d. Cliquez sur Match.
Voici à quoi doit ressembler la structure de l’élément de recherche : 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 NoteCheckmark group
PrimaryCheckmark in the “Type of Sick Note” checkmark groupPrimaryGroup -> Checkmark
SecondaryCheckmark in the “Type of Sick Note” checkmark groupSecondaryGroup -> Checkmark
  1. Supprimez les éléments de recherche automatiquement créés pour les nouveaux champs.

Extraction des données du médecin

Nous devons maintenant traiter le dernier bloc de données de 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”. Rendez l’élément facultatif.
  2. La zone que nous allons rechercher contient un libellé. Pour la 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 du médecin et la signature est délimitée par quatre séparateurs. Ils sont situés autour de l’élément “kwDoctorTitle”. Toutefois, 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 :
NameOrientationMinimum lengthSearch area
SeparatorRightVertical180Right of “kwDoctorTitle”, Nearest to the right page edge
SeparatorLeftVertical180Left of “kwDoctorTitle”, Left of “SeparatorRight” (in case “kwDoctorTitle” wasn’t found), Nearest to “SeparatorRight”, Below “SeparatorRight” (click the icon to the right of the separator name and select Top Boundary of Region), Exclude “SeparatorRight”
SeparatorBottomHorizontal200Below “kwDoctorTitle” (with adjustment of -10 points), Right of “SeparatorLeft”, Left of “SeparatorRight”, Nearest to the bottom page edge (this setting will be useful in case “kwDoctorTitle” wasn’t found)
SeparatorTopHorizontal200Above “kwDoctorTitle”, Right of “SeparatorLeft”, Nearest to “TypeOfSickNoteGroup”, Exclude “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 ces 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 dans “DoctorGroup” :
PropertyValue
NameSignature
TypePicture
Minimum width15
Minimum height15
Maximum width600
Maximum height350
Search Conditions section of the Code EditorThe signature may be partly located outside the box. To find the whole image, we will expand the search area by 100 dots in each direction: RSA: DoctorAreaGroup.DataArea.BoxRegion.Rect.GetInflated(100dot,100dot);
  1. Pour extraire les informations textuelles dans la zone, créez un élément Paragraph avec les paramètres suivants :
PropertyValue
NameDoctorInformation
Maximum line count6
Search areaAbove “kwDoctorTitle”, Exclude “Signature”
Search Conditions section of the Code EditorRSA: DoctorAreaGroup.DataArea.BoxRegion.Rect;
  1. Cliquez sur Match et vérifiez que les éléments sont correctement trouvés.
Voici à quoi la structure des éléments de recherche doit ressembler : 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 InformationText field in the “Doctor” groupDoctorInformation
SignatureImage field in the “Doctor” groupSignature
  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.