Outils pour utilisateurs

Outils du site


public:annotation:specs_annotation_analec:enrichissement

Enrichissement d'annotations Analec par script

Objectif

Automatiser et accélérer la création d'annotations Analec. Dans un premier temps, il s'agit :

  • d'ajouter des propriétés aux MENTION
  • de créer des schémas CHAINE à partir des MENTION qui ont le même référent
  • de créer des relations ANAPHORE à partir de MENTION

Méthode

S'appuyer sur les scripts et rapports de JP et MB réalisés dans le cadre de stages pour le projet Democrat pour transférer les scripts produits dans TXM, puis les faire évoluer depuis TXM à l'aide de l'éditeur de scripts intégré.

Les travaux de JP et MB ont permis de valider leur procédure pour l'annotation de plusieurs textes du corpus DEMOCRAT : “Bouvard et Pécuchet”, “Nemoville”, “De la ville au Moulin”, “The Portrait of Dorian Grey”, “Le ventre de Paris”, “La capitaine Fracasse”, “La morte amoureuse”, “L'Est Républicain (2002)” et “Sarrasine”.

Script Perl d'enrichissement

MB a réalisé un script Perl qui prend en entrée un corpus Analec (au format XML-TEI Analec) et qui a plusieurs modes d’exécution :

  • premierMaillon : ajoute la propriété “NEW”
  • ajoutDefinitude : ajoute la propriété “DEFINITUDE”
  • creationChaines : crée des schémas “CHAINE”
  • creationRelations (pas terminé) : crée des relations “ANAPHORE??”

Détails des nouvelles propriétés des MENTION :

  • DEFINITUDE(AMBIGU, DEFINI, DEMONSTRATIF, INDEFINI, NONE) : Le champ permet d'indiquer si le référent est défini ou non
  • NEW(NO, YES) : indique le statut nouveau ou non du référent dans la narration
    • si il a déjà été traité par le script Perl
    • et si le maillon est le premier de la chaîne

Création d'une CHAINE : regrouper les maillons dont le référent est égal.

Détails des propriétés des CHAINE créées :

  • REF(liste ouverte) : l'identifiant du référent, la valeur est construite avec la valeur de la propriété REF des MENTION
  • GENRE(INDETERMINABLE, FEMININ, MASCULIN) : genre du référent (pas le genre grammatical), indéterminable (ex: objet, groupe de personne mixte)
  • NOMBRE(GROUPE_FLOU, GROUPE_STRICT, SINGULIER) : indique le nombre de personnes que représente le référent.
  • NB MAILLONS(liste ouverte) : indique le nombre de MENTION dans la chaîne
  • TYPE REFERENT(UNKNOWN, CONCRET_OBJECT, ABSTRACT_OBJECT, TIME, PRODUCT, AMOUNT, EVENT, GPE, ORG, PERSON, LIEU)

Algos

premierMaillon

  • Compter le nombre de MENTION
  • Créer un dictionnaire qui associe les valeurs de la propriété MENTION@REF avec les ID des MENTION de la référence
  • Pour chaque MENTION
    • incrémenter le dictionnaire pour la clé MENTION@REF
    • si MENTION@NEW existe → pas de modification
    • sinon
      • si MENTION@REF est rencontré pour la première fois → MENTION@NEW=YES
      • sinon → MENTION@NEW=NO

ajoutDefinitude

  • Compter le nombre de MENTION
  • Créer un dictionnaire qui associe les valeurs de la propriété MENTION@REF avec les ID des MENTION de la référence
  • Pour chaque MENTION
    • incrémenter le dictionnaire pour la clé MENTION@REF
    • si MENTION@DEFINITUDE existe et est différent de NONE→ pas de modification
    • sinon
      • si FORM match ^(le\s.+)|(Les\s.+)|(Le\s.+)|(la\s.+)|(La\s.+)|(l'.+)|(L'.+)|(les\s.+)|(au\s.+)|(Au\s.+)|(aux\s.+)|(Aux\s.+)|(du\s.+)|(Du\s.+)/ → MENTION@DEFINITUDE = DEFINI
      • si FORM match /^(un\s.+)|(une\s.+)|(Un\s.+)|(Une\s.+)|(Chaque\s.+)|(chaque\s.+)|(Certains\s.+)|(Certaines\s.+)|(certains\s.+)|(certaines\s.+)|(aucun\s.+)|(aucune\s.+)|(Aucun\s.+)|(Aucunes\s.+)|(Autre\s.+)|(Autre\s.+)|(autres\s.+)|(autre\s.+)|(quelque\s.+)|(quelques\s.+)|(Quelque\s.+)|(Quelques\s.+)/ → MENTION@DEFINITUDE = INDEFINI
      • si FORM match /^(ce\s.+)|(cette\s.+)|(Cette\s.+)|(cet\s.+)|(ces\s.+)|(Ce\s.+)|(Cet\s.+)|(Ces\s.+)/ → MENTION@DEFINITUDE = DEMONSTRATIF
      • si FORM match /^(des\s.+)|(de\s.+)|(Des\s.+)|(De\s.+)/ → MENTION@DEFINITUDE = AMBIGU
      • sinon MENTION@DEFINITUDE = NONE

Avec FORM le texte recouvert par l'annotation (pas une propriété Analec)

creationChaines

Paramètre : taille minimum d'une chaîne

  • Compter le nombre de MENTION
  • Créer un dictionnaire qui associe les valeurs de la propriété MENTION@REF avec les ID des MENTION de la référence
  • Pour chaque entrée du dictionnaire ayant un nombre de MENTION supérieur à la taille minimum d'une chaîne, créer un élément <joinGrp> avec @type=“AnalecSchema” et @n=“CHAINE”
    • pour chaque identifiant de MENTION créer un élément <fs> avec id=identifiant de la MENTION et un sous élément <f> avec f@name=identifiant du référent

creationRelations (pas terminé)

  • Compter le nombre de MENTION
  • Créer un dictionnaire qui associe les valeurs de la propriété MENTION@REF avec les ID des MENTION de la référence
  • Pour chaque entrée du dictionnaire ayant un nombre de maillon supérieur à la taille minimum d'une chaîne, créer un élément <joinGrp> avec @type=“AnalecSchema” et @n=“ANAPHORE”

Fropos2Categorie : création de la propriété CATEGORIE à partir des propriétés de mots fropos

Solution

Etape 2.2 Democrat : scriptage

Les scripts doivent être étudiés pour bien comprendre ce qu'ils font et être ré-écrits sous forme de Macro Groovy pour manipuler directement les objets Java d'Analec : les unités, les schémas et les relations.

Etape 3

  • Amélioration de la macro AjoutDéfinitude pour tenir compte des étiquettes des mots des Unités
  • Amélioration de la macro CreationChaine pour gérer les cas suivants :
    • une unité a été créée
    • une unité a changé de référent
  • Première version de la macro Fropos2Categorie qui créé la propriété CATEGORIE à partir des règles définies https://groupes.renater.fr/wiki/democrat/prive/txm_annotation_exploitation

Consolidation sous forme de commandes

Une fois les macros éprouvées les transformer en commandes RCP bien intégrées à l'extension Analec de TXM.

Recette 2.2

La recette consiste à comparer les annotations du texte “Le capitaine Fracasse” produites par les 3 Macros (PremierMaillon, AjoutDefinitude et CreationChaines) avec celles produites par les scripts Perl. On trouvera dans les fichiers partagés (se connecter sur le Sharedocs de Democrat) :

  • “TXM/Recettes/Etape2_2/Fracasse_or.xml” : Fracasse OR, texte sur lequel on applique les macros, contenant seulement les unités MENTION et les propriétés nécessaires (REF)
  • “TXM/Recettes/Etape2_2/Fracasse.xml” : Fracasse AUGMENTÉ, texte résultat de l'application des scripts Perl.

Calcul de chaines, relations et propriétés d'unités dans Fracasse_or.xml

  1. importer dans TXM le texte “Fracasse_or.xml” avec la commande “Analec > Import TEI Corpus”
    Creating source directory: $srcDir
    Importing TEI data from: /home/.../Fracasse_or.xml
    ...
    Importing TEI model from: /home/.../Fracasse_or.xml
    Reindexing annotations with TXM words.
    Saving annotations.
    Done.
  2. sélectionner le corpus FRACASSEOR créé dans la vue Corpus
  3. ouvrir la vue Macro avec la commande de menu principal “Affichage > Vues > Macro”
  4. descendre dans le dossier “analec”
  5. lancer la macro “PremierMaillon” en faisant un double-clic sur le nom de la macro1). Choisir les paramètres suivants :
    • unit_type = MENTION
    • reset = false (décoché)
    • résultat dans la console :
      Exécution de PremierMaillonMacro.groovy
      nIgnored=0
      nYes=348
      nNo=2727
  6. lancer la macro “AjoutDefinitude”
    • unit_type = MENTION
    • reset = false (décoché)
    • résultat dans la console :
      Exécution de AjoutDefinitudeMacro.groovy
      nIgnored=0
      nModified=3075
       nDefini=1063
       nIndefini=386
       nDemonstratif=129
       nAmbigu=205
       nNone=1292
  7. lancer la macro “CreationChaines”
    • unit_type = MENTION
    • résultat dans la console :
      Exécution de CreationChainesMacro.groovy
      Creating the 'CHAINE' schema in the structure
      nUpdated=0
      nCreated=348
  8. lancer la macro “CreationRelations”
    • unit_type = MENTION
    • schema_type = CHAINE
    • résultat dans la console :
      Exécution de CreationRelationsMacro.groovy
      Creating the 'ANAPHORE' relation in the structure
      nCreated=2727

Import de Fracasse.xml

  1. importer dans TXM le texte “Fracasse.xml” avec la commande du menu principal “Analec > Import TEI corpus”

Comparaison entre les deux textes

  1. comparer les unités et les chaînes entre les deux corpus à l'aide des macros suivantes :
    • macro “Units” (affichage de la liste des unités)
      • Fracasse OR :
        1 - 16 -> 23 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:DEFINI, NEW:YES, REF:SI] : le revers d' une de ces collines décharnées
        2 - 19 -> 23 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:INDEFINI, NEW:NO, REF:SI] : une de ces collines décharnées
        3 - 21 -> 23 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:DEMONSTRATIF, NEW:YES, REF:collines décharnées] : ces collines décharnées
        ...
        3074 - 11800 -> 11802 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:DEFINI, NEW:NO, REF:le Roi] : du Tyran tragique
        3075 - 11804 -> 11805 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:DEFINI, NEW:NO, REF:le Matamore] : du Tranche-montagne
      • Fracasse augmenté
        1 - 16 -> 23 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:DEFINI, NEW:YES, REF:SI] : le revers d' une de ces collines décharnées
        2 - 19 -> 23 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:INDEFINI, NEW:NO, REF:SI] : une de ces collines décharnées
        3 - 21 -> 23 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:DEMONSTRATIF, NEW:YES, REF:collines décharnées] : ces collines décharnées
        ...
        3074 - 11800 -> 11802 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:DEFINI, NEW:NO, REF:le Roi] : du Tyran tragique
        3075 - 11804 -> 11805 - [CATEGORIE:GN, CODE SEM:, DEFINITUDE:DEFINI, NEW:NO, REF:le Matamore] : du Tranche-montagne
    • macro “Chaines” (affichage de la liste des unités de chaque chaine)
      • Fracasse OR :
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:ces salles, NB MAILLONS:3]: de chambres délabrées, ces salles, où
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:le cadavre du passé, NB MAILLONS:3]: c', le cadavre du passé, qui
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:un petit volume, NB MAILLONS:4]: un petit volume, dont, en, le livre
        ...
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:fumée, NB MAILLONS:5]: un mince filet de fumée, qui, se tortillait, C', ce léger nuage blanchâtre mentionné dans la description extérieure du castel
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:lampe, NB MAILLONS:4]: sa lampe, l', sa lampe, ce rayon
      • Fracasse augmenté :
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:ces salles, NB MAILLONS:3]: de chambres délabrées, ces salles, où
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:le cadavre du passé, NB MAILLONS:3]: c', le cadavre du passé, qui
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:un petit volume, NB MAILLONS:4]: un petit volume, dont, en, le livre
        ...
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:lampe, NB MAILLONS:4]: sa lampe, l', sa lampe, ce rayon
        [NOMBRE:, TYPE REFERENT:, GENRE:, REF:l_écurie, NB MAILLONS:4]: l' écurie, où, son écurie, l' écurie
1)
pour les curieux : clic droit sur le nom de la macro, puis “Éditer” pour ouvrir le code de la macro dans l'éditeur de texte de TXM. Il s'agit d'un script écrit dans le langage Groovy comprenant des traits de langage de Python, Ruby, Perl et Smalltalk. Le code d'une macro donne accès à toutes les fonctionnalités de la plateforme TXM. Si vous changez le code de la macro, cela aura une répercussion immédiate sur son fonctionnement (ne pas oublier de sauver les modifications en cliquant sur le bouton “disquette” dans la barre d'outils de l'éditeur). En savoir plus...
public/annotation/specs_annotation_analec/enrichissement.txt · Dernière modification: 2017/06/07 18:15 par slh@ens-lyon.fr