Export et Import d'annotations Analec

Objectifs

  • Pouvoir interfacer les annotations Analec produites ou manipulées dans TXM avec d'autres logiciels d'annotation (Analec, Sacr, Glozz, etc.)
  • Pouvoir sauvegarder les annotations dans un format non-binaire = lisible et éditable par un tiers
  • Pouvoir importer des corpus+annotations d'un format non-binaire = lisible et éditable par un tiers

Solutions

Commande d'export Glozz

V1 - Macro ExportGlozzAnnotationMacro

Export d'un type d'unité au format XML Glozz

V2 - ???

Commande d'import Glozz

  1. Importer dans TXM le texte brut d'un corpus Glozz
  2. Importer le corpus Glozz avec le code d'Analec
  3. Réaligner les positions caractères des unités en positions mots

Commande d'export XML-TEI-URS

Ajouter la commande “Export XML-TEI-URS…” dans le menu principal “Analec”.

État de l'art

Modèle standoff TEI discuté dans le contexte du TEI Linguist SIG

La discussion est complexe et n'a pas encore abouti dans les recommandations de la TEI. L'exemple le proche des objectifs duformat URS date de 2015 etprend le forme suivante : extrait d'un exemple d'annotation 'stdf' TEI au niveau pos+lemme du projet https://github.com/laurentromary/stdfSpec.

<stdf
    xmlns="http://standoff.proposal">
    <soHeader>
        <titleStmt
            xmlns="http://www.tei-c.org/ns/1.0">
            <title>Morpho-syntactic annotation</title>
        </titleStmt>
    </soHeader>
    <annotations>
        <spanGrp type="wordForm"
            xmlns="http://www.tei-c.org/ns/1.0">
            <span from="#w1" ana="#fs1" corresp="#entry1"/>
            <span from="#w2" ana="#fs2" corresp="#entry2"/>
            <span from="#w2" ana="#fs3" corresp="#entry3"/>
            <span from="#w3" to="#w4" ana="#fs4" corresp="#entry4"/>
            <span from="#w5" ana="#fs5" corresp="#entry5"/>
            <span from="#w6" ana="#fs6" corresp="#entry6"/>
        </spanGrp>
        <fs xml:id="fs1" corresp="#entry1"
            xmlns="http://www.tei-c.org/ns/1.0">
            <f name="lemma">
                <string>I</string>
            </f>
            <f name="pos">
                <symbol value="PP"/>
            </f>
        </fs>
...
 
    </stdf>
    <text>
        <body>
            <div>
                <p>
                    <w xml:id="w1">I</w>
                    <w xml:id="w2">wanna</w>
                    <w xml:id="w3">put</w>
                    <w xml:id="w4">up</w>
                    <w xml:id="w5">new</w>
                    <w xml:id="w6">wallpaper</w>
                    <pc>.</pc>
                </p>
            </div>
        </body>
    </text>

Il convient de noter que dans des exemples plus récents et dans le schéma ODD actuel, l'élément <stdf> a été remplacé par <standOff>, <soHeader> par <teiHeader> (facultatif sous <standOff>) et <annotations> par <listAnnotation>. Voici un exemple du format plus récent où l'annotation consiste en reconnaissance d'entités nommées (extrait de FRMGwiki-TEIstandOff.xml ) :

<TEI xmlns="http://www.tei-c.org/ns/1.0" xmlns:psg="http://frmg.passage">
   <teiHeader>
      <fileDesc>
         <titleStmt>
            <title>Named Entities recognition and disambiguation (NERD), XML-TEI output</title>
         </titleStmt>
         <publicationStmt>
            <p/>
         </publicationStmt>
         <sourceDesc>
            <p/>
         </sourceDesc>
      </fileDesc>
      <profileDesc>
         <creation>This file has been generated by the NERD2XML service </creation>
      </profileDesc>
   </teiHeader>
   <standOff xmlns="http://standoff.proposal">
      <listAnnotation type="measure">
         <annotationBlock xmlns="http://www.tei-c.org/ns/1.0">
            <measure xml:id="E2N2">
               <num>1</num>
            </measure>
            <interp ana="#E2N2" inst="#d1e79"/>
            <span from="#E2T2" to="#E2T2" xml:id="d1e79"/>
         </annotationBlock>
         <annotationBlock xmlns="http://www.tei-c.org/ns/1.0">
            <measure xml:id="E3N1">
               <num>2</num>
            </measure>
            <interp ana="#E3N1" inst="#d1e132"/>
            <span from="#E3T2" to="#E3T2" xml:id="d1e132"/>
         </annotationBlock>
...
      </listAnnotation>
      <listAnnotation type="individual">
         <annotationBlock xmlns="http://www.tei-c.org/ns/1.0">
            <person xml:id="E2N1">
               <persName> Léo Hamon </persName>
            </person>
            <interp ana="#E2N1" inst="#d1e80"/>
            <span from="#E2T5" to="#E2T6" xml:id="d1e80"/>
         </annotationBlock>
         <annotationBlock xmlns="http://www.tei-c.org/ns/1.0">
            <person xml:id="E266N2">
               <persName> puis- sions </persName>
            </person>
            <interp ana="#E266N2" inst="#d1e28023"/>
            <span from="#E266T24" to="#E266T25" xml:id="d1e28023"/>
         </annotationBlock>
...
      </listAnnotation>
      <listAnnotation type="dateTime">
         <annotationBlock xmlns="http://www.tei-c.org/ns/1.0">
            <date xml:id="E4N1">
               <date>17 - 25 août 1944</date>
            </date>
            <interp ana="#E4N1" inst="#d1e173"/>
            <span from="#E4T6" to="#E4T10" xml:id="d1e173"/>
         </annotationBlock>
         <annotationBlock xmlns="http://www.tei-c.org/ns/1.0">
            <date xml:id="E48N1">
               <date>MARDI</date>
            </date>
            <interp ana="#E48N1" inst="#d1e5984"/>
            <span from="#E48T1" to="#E48T1" xml:id="d1e5984"/>
         </annotationBlock>
      </listAnnotation>
 
 
   </standOff>
   <text>
      <body>
         <div>
            <p xml:id="E1">
               <w xmlns="" xml:id="E1T1">Journal</w>
               <w xmlns="" xml:id="E1T2">de</w>
               <w xmlns="" xml:id="E1T3">Léo</w>
               <w xmlns="" xml:id="E1T4">HAMON</w>
            </p>
            <p xml:id="E2">
               <w xmlns="" xml:id="E2T1">Pièce</w>
               <w xmlns="" xml:id="E2T2">1</w>
               <w xmlns="" xml:id="E2T3">Journal</w>
               <w xmlns="" xml:id="E2T4">de</w>
               <w xmlns="" xml:id="E2T5">Léo</w>
               <w xmlns="" xml:id="E2T6">Hamon</w>
               <w xmlns="" xml:id="E2T7">=</w>
               <w xmlns="" xml:id="E2T8">L'</w>
               <w xmlns="" xml:id="E2T9">insurrection</w>
               <w xmlns="" xml:id="E2T10">de</w>
               <w xmlns="" xml:id="E2T11">Paris</w>
            </p>
            <p xml:id="E3">
               <w xmlns="" xml:id="E3T1">Pièce</w>
               <w xmlns="" xml:id="E3T2">2</w>
               <w xmlns="" xml:id="E3T3">Notes</w>
               <w xmlns="" xml:id="E3T4">complémentaires</w>
               <w xmlns="" xml:id="E3T5">au</w>
               <w xmlns="" xml:id="E3T6">récit</w>
               <w xmlns="" xml:id="E3T7">de</w>
               <w xmlns="" xml:id="E3T8">Léo</w>
               <w xmlns="" xml:id="E3T9">Hamon</w>
            </p>
         </div>
      </body>
   </text>
</TEI>

Solution

Implémentation TXM

Commande Exporter Corpus au format XML-TEI URS...

La commande propose les paramètres suivants :

  • répertoire où écrire le résultat
  • le résultat est une archive (par défaut), ou un répertoire : la forme répertoire est plus pratique pour les export – import combinés

Elle exporte les textes, leurs annotations et la déclaration de la structure d'annotation URS dans une archive Zip d'extension ”.urs”.

L'archive contient 2 répertoires et 1 fichier :

  • le répertoire 'texts'
    • pour chaque texte écrire le contenu au format XML-TEI TXM sans les annotations dans un fichier XML d'extension TEXTID+”.xml” :
  • le répertoire 'annotations'
    • pour chaque texte écrire les annotations au format XML-TEI URS dans l'élément “stdf” dans un fichier XML d'extension TEXTID+”-urs.xml”
  • la structure d'annotation est sérialisée au format Glozz dans un fichier XML d'extension '.aam'.

Exemple (non-complet, voir la spécification XML-TEI URS) :

<TEI>
    <teiHeader>
       ...
       <encodingDesc>
          <listPrefixDef>
             <prefixDef ident="text" matchPattern="(.+)" replacementPattern="../texts/0001.xml#$1"/>
          </listPrefixDef> 
       </encodingDesc>
       ...
    </teiHeader>
    <standOff
        xmlns="http://standoff.proposal">
        <soHeader>
            ... titleStmt, respStmt, revisionDesc
        </soHeader>
        <annotations type="coreference">
            <annotationGrp type="Unite" subtype="MENTION">
                <span id="u-MENTION-1" from="text:w_0001_3" to="text:w_0001_3" ana="#u-MENTION-1-fs"/>
                <span id="u-MENTION-2" from="text:w_0001_4" to="text:w_0001_8" ana="#u-MENTION-2-fs"/>
                ...
            </annotationGrp>
            ... 
            <!-- for all AnalecUnite types -->
            <annotationGrp type="Relation" subtype="ANAPHORE">
                <link id="s-CHAINE-1" target="#u-ANAPHORE-22"/>
                <link id="s-CHAINE-2" target="#u-ANAPHORE-9"/>
                ...
            </annotationGrp>
            ... 
            <!-- for all Relation subtypes -->
            <annotationGrp type="AnalecSchema" n="CHAINE">
                <link id="s-CHAINE-1" target="#u-MENTION-22 #u-MENTION-23 #u-MENTION-20 #u-MENTION-21 #u-MENTION-5 #u-MENTION-19 #u-MENTION-18 #u-MENTION-2 #u-MENTION-17 #u-MENTION-12 #u-MENTION-16 #u-MENTION-25 #u-MENTION-11 #u-MENTION-24 #u-MENTION-1 #u-MENTION-14 #u-MENTION-10 #u-MENTION-27 #u-MENTION-26" ana="#s-CHAINE-1-fs"/>
                <link id="s-CHAINE-2" target="#u-MENTION-9 #u-MENTION-6 #u-MENTION-3 #u-MENTION-13" ana="#s-CHAINE-2-fs"/>
                ... 
                <!-- for all CHAINE Schema -->
            </annotationGrp>
            ... 
            <!-- for all Schema subtypes -->
 
            <div type="unit-fs">
                <fs id="u-MENTION-1-fs"/>
                <fs id="u-MENTION-2-fs"/>
                ...
            </div>
            <div type="relation-fs">
                <fs id="u-ANAPHORE-1-fs"/>
                ...
            </div>
            <div type="schema-fs">
                <fs id="s-CHAINE-1-fs">
                    <f name="NOMBRE">
                        <string/>
                    </f>
                    <f name="GENRE">
                        <string/>
                    </f>
                    <f name="TYPE REFERENT">
                        <string/>
                    </f>
                    <f name="REF">
                        <string/>
                    </f>
                    <f name="NB MAILLONS">
                        <string>19</string>
                    </f>
                </fs>
                ...
            </div>
        </annotations>
    </standOff>
</TEI>

Pour l'instant, les relations et les schémas exportés ne contiennent que les unités (ce qui correspond à l'implémentation et à l'usage actuels de l'extension Analec dans TXM).

Commande d'import d'annotations XML-TEI URS

Cette commande a 4 paramètres :

  • un corpus C contenant n textes et une structure d'annotation SA (optionnelle)
  • le chemin d'un fichier de déclaration d'une structure d'annotation SB au format Glozz (.aam)
  • le chemin d'un répertoire de fichiers d'annotations XML-TEI URS correspondant à certains des textes du corpus C et à la structure d'annotation SB
  • une option pour remplacer ou ajouter les annotations : “supprimer les annotations existantes avant l'import.”
    • attention : l'option ajouter ne vérifie pas qu'une annotation existe déjà (même type, même positions et même valeurs de propriétés)

La commande :

  • ajoute dans le corpus C la structure d'annotation SB (fusion avec SA si SA existe)
  • crée les annotations Unités, Relations et Schemas
    • test d'existence de textes dans C (arrêt si absence)
    • test d'existence d'identifiants de mots dans les textes de C (warning si absence)
    • les annotations (type ou propriété) non-déclarées dans SB sont ignorées

Commande d'import de corpus XML-TEI-URS

A partir des répertoires “texts” et “annotations” d'un export XML-TEI-URS :

  1. importer
  2. charger les annotations
public/annotation/specs_annotation_analec/export_import.txt · Dernière modification: 2018/02/23 13:22 par slh@ens-lyon.fr