Passer au contenu principal
Cette section présente des exemples de règles d’extraction créées avec l’éditeur de code, qui offre plus de flexibilité que l’interface utilisateur graphique (voir la section Syntax pour une description détaillée de la syntaxe employée).

Recherche de la dernière occurrence d’une entité nommée

Dans cet exemple, une règle d’extraction est utilisée pour trouver le nom de l’organisation du locataire dans un contrat de bail. Ce nom apparaît après ceux de toutes les autres organisations et ne peut pas être extrait à l’aide des paramètres de l’interface graphique, où vous ne pouvez sélectionner que Instances > First. Toutefois, vous pouvez utiliser une règle d’extraction pour rechercher le nom de l’organisation qui précède immédiatement le mot « Tenant » entre parenthèses. D’abord, nous identifions le mot-clé « Tenant » comme élément de recherche auxiliaire. Ensuite, nous cherchons le nom de l’organisation qui apparaît avant ce mot-clé. Dans cet exemple, deux jetons s’interposent — une parenthèse ouvrante et un guillemet — nous limitons donc la distance à trois jetons, en conservant une marge de sécurité. Si vos documents comportent davantage de jetons séparant le mot-clé du nom de l’organisation, augmentez ce nombre en conséquence.

Règle d’extraction de la dernière occurrence d’organisation

// Nous recherchons une seule instance
~TenantName
// Rechercher le nom d'organisation qui apparaît avant le mot-clé "Tenant"
// et qui en est séparé par trois jetons au maximum
// Les jetons intermédiaires ne doivent pas contenir d'autre nom d'organisation
[ t: @NEROrganization ]+ [ ~@NEROrganization ~@kw_Tenant ]{0,3} [ @kw_Tenant ]
=>
TenantName( t );

Exemple

Exemple montrant l’extraction du nom du titulaire de bail

Extraction d’un montant indiqué à la fois en toutes lettres et en chiffres

Dans cet exemple, une règle d’extraction avec des expressions régulières est utilisée pour trouver un montant d’abord écrit en toutes lettres puis en chiffres entre parenthèses, par exemple : Deux mille cent quarante-sept dollars et soixante cents ($2,147.60) Deux mille cent quarante-sept dollars et soixante cents (en chiffres : $2,147.60)

Règle d’extraction d’un montant

// La variable a reçoit l'entité nommée Money qui n'est pas en chiffres
// et qui n'a pas encore été affectée à une autre instance de l'élément de recherche Money
[ a: @NERMoney( same ) ~@Money ~/\d+/ ]+
[ br: '(' ]
// Le point d'interrogation signifie que les mots « en chiffres » sont facultatifs
// Les symboles ^ et $ signifient que la chaîne entière doit correspondre à l'expression régulière
// L'option i signifie que la correspondance ne tient pas compte de la casse
( [ e1: /^in$/i ] [ e2: /^numbers$/i ] [ e3: ':' ]? )?
// La variable b reçoit l'entité nommée Money qui est placée entre parenthèses
[ b: @NERMoney( same ) ~@Money ]+
=>
Money( a + br + e1 + e2 + e3 + b );

Exemple

Exemple d’extraction de montants

Recherche de segments à l’aide de mots-clés

Dans cet exemple, des règles d’extraction sont utilisées pour trouver des segments qui ne peuvent pas être détectés de manière fiable par l’activité Segmentation. Les règles recherchent des mots-clés qui marquent le début ou la fin d’un segment et extraient le texte entre les deux. Nous partons du principe que nos documents comportent des titres de niveau deux numérotés, en majuscules, par exemple : 1.1 PREMISES, 2.3 LIABILITY AND INDEMNITY, etc. Nous supposons également avoir déjà extrait les titres de premier niveau dans un élément de recherche nommé “kw_Heading1” (la règle d’extraction correspondante est omise par souci de concision). D’abord, nous recherchons les mots-clés qui commencent chaque paragraphe du document et nous les extrayons dans un élément de recherche nommé “kw_Heading2”. Ensuite, nous plaçons le texte entre deux mots-clés consécutifs dans un élément de recherche nommé “Segment”. Dans la version actuelle d’Advanced Designer, l’éditeur de code n’est disponible que pour les éléments de recherche utilisés pour trouver des entités nommées. En guise de solution de contournement, pour extraire du texte comme des titres ou des segments au moyen de code, créez simplement un élément de recherche pour l’une des entités nommées prises en charge (par exemple, Organization) et saisissez le code de la règle dans l’éditeur de code de cet élément.

Règle d’extraction des titres de niveau 2 vers l’élément de recherche kw_Heading2

// Rechercher un titre de deuxième niveau numéroté contenant jusqu'à cinq mots en majuscules
// Le numéro du titre peut être trouvé sous la forme d'un seul jeton : 1.1
[ t1: /\d{1,2}\.\d{1,2}/ ] [ t2: <all_letters_capitalized> ]{1,5}
=>
kw_Heading2( t1 + t2 );
// Le numéro du titre peut être trouvé sous la forme de trois jetons distincts : 1, point, 1
[ t1: /\d{1,2}/ ] [ t2: '.' ] [ t3: /\d{1,2}/ ] [ t4: <all_letters_capitalized> ]{1,5}
=>
kw_Heading2( t1 + t2 + t3 + t4 );

Règle d’extraction du segment vers l’élément de recherche « Segment »

// Trouver le segment de texte entre deux titres de section consécutifs
// Exclure également les titres de premier niveau
[ @kw_Heading2 ] [ interval: ~@kw_Heading2 ~@kw_Heading1 ]+
=>
Root.Segment( interval );

Exemple

Exemple montrant l’extraction de segments Dans cet exemple, les mots « 3.1 FIRSTLY » et « 3.2 SECONDLY » sont extraits dans l’élément de recherche kw_Heading2, puis le texte compris entre deux occurrences consécutives de l’élément de recherche kw_Heading2 est extrait dans une instance de l’élément de recherche Segment.

Regrouper les informations sur chaque entité

Dans cet exemple, des règles d’extraction sont utilisées pour garantir que les détails concernant chaque partie à un accord sont correctement regroupés (c’est‑à‑dire que le nom et l’adresse de chaque partie appartiennent à une même instance de groupe, sans être scindés en plusieurs instances ni mélangés avec les détails de l’autre partie). L’idée est d’identifier une information relative à une partie qui apparaît toujours en premier. Plusieurs approches sont possibles, selon la manière dont les accords sont rédigés. Dans cet exemple, nous supposons que le nom de chaque organisation apparaît toujours en premier, suivi de son adresse et de son rôle dans l’accord. Par conséquent, nous allons :
  1. Rechercher les noms d’organisation, créer une nouvelle instance de l’élément de recherche de groupe Party_Group pour chaque nom trouvé, et renseigner son élément de recherche enfant nommé “Organization_Name”.
  2. Rechercher l’adresse et le rôle situés à une distance maximale de, disons, 20 tokens de chaque occurrence du nom de l’organisation, accéder à l’instance de Party_Group parente de ce nom et renseigner, dans cette instance, les éléments de recherche enfants nommés “Address” et “Role”.
Les données ne seront recherchées que dans le segment identifié par l’activité Segmentation et transmis à l’activité Extraction Rules en tant que champ d’entrée nommé “Parties_Segment”.

Règle d’extraction de l’élément de recherche Organization_Name

// Rechercher le nom de l'organisation et créer une nouvelle instance de groupe pour chacune
[ org: @NEROrganization( same ) ~@Party_Group.Organization_Name @Parties_Segment ]+
=>
// Créer une nouvelle instance de Party_Group et renseigner Organization_Name
Party_Group.Organization_Name( org );

Règle d’extraction de l’élément de recherche Address

// Rechercher maintenant l'adresse séparée par 20 jetons maximum
// du nom de l'organisation
// et qui n'a pas encore été attribuée à l'une des organisations dans Party_Group
[ org: @Party_Group.Organization_Name( same ) ]+
[ ~@NERAddress ]{0,20}
[ t: @NERAddress( same ) ~@Party_Group.Address @Parties_Segment ]+
=>
// Accéder à l'instance de Party_Group qui est le parent du nom de l'organisation
// et renseigner son enfant Address
parent( obj( org )).Address( t );

Règle d’extraction de l’élément de recherche « Role »

// Répéter la même opération pour le rôle
// Pour trouver le rôle, utiliser des mots-clés
[ org: @Party_Group.Organization_Name( same ) ]+
[ ~("Tenant" | "Landlord" | "Broker") ]{0,20}
[ t: "Tenant" | "Landlord" | "Broker" ~@Party_Group.Role @Parties_Segment ]+
=>
parent( obj( org )).Role( t );

Exemple

Les éléments de recherche seront extraits comme suit : Example showing grouped data extraction Dans le formulaire de données, vous pouvez également constater que le nom, l’adresse et le rôle de chaque entreprise sont regroupés dans des instances de groupe distinctes : Example showing grouped data fields Les détails de chaque organisation sont regroupés, comme l’indiquent les numéros d’instance entre crochets.

Recherche conjointe de la date et de l’heure

Dans cet exemple, une règle d’extraction est utilisée pour repérer une combinaison d’heure et de date. Tout d’abord, nous utilisons un élément de recherche nommé “Time” de type Value from Regular Expression (l’expression régulière utilisée est [1]?\d:\d{2}\s+(([ap]\.m\.)|([AP]M))?). Ensuite, nous recherchons une entité nommée Date située à proximité. Enfin, nous concaténons les séquences de jetons trouvées et affectons le résultat à un élément de recherche nommé “TimeAndDate”.

Règle d’extraction de la date et de l’heure combinées

// Utiliser une valeur de l'élément de recherche par expression régulière pour trouver l'heure
// Utiliser @NERDate pour trouver une entité nommée Date proche de l'heure
[ time: @Time ~@TimeAndDate ]+ [ t: ~@NERDate ]{0,3} [ date: @NERDate( same ) ]+
=>
// Combiner les valeurs pour les écrire dans un seul champ
// Seules les séquences de jetons consécutives peuvent être combinées, le jeton auxiliaire est donc également ajouté
TimeAndDate( time + t + date );

Exemple

Exemple présentant l'extraction de l'heure et de la date