Outils pour utilisateurs

Outils du site


public:specs_production_projet_oriflamms

Préparation d'un projet Oriflamms

Objectif

Produire un projet Oriflamms (un ensemble de dossiers contenant des fichiers au format XML-TEI-Oriflamms pour l'importation dans le logiciel Oriflamms et dans TXM) :

  • à partir d'un fichier XML-TEI Oriflamms-raw, produire les dossiers :
    • texts : 2 versions :
      • -w (tokenisé par mot)
      • -c (tokenisé par caractère)
    • zones : créer le canevas pour le logiciel Oriflamms (on peut remplacer ces fichiers par le résultat de l'alignement produit par A2IA)
    • img_links : créer le canevas pour le logiciel Oriflamms
    • (img)
    • (ontologies)
    • (ontologies_links)

Méthode

Une macro permettant d'appliquer une série de transformations XSLT et rechercher/remplacer en expressions régulières.

Liens aux spécifications et pages wiki connexes

État de la plateforme

Avancement dans l'élaboration de la solution

Solution

Spécification

avec corpus.xml le fichier XML-TEI en entrée avec "/" la racine du projet Oriflamms, créé

  1. créer le dossier du projet à coté de corpus.xml nommé "corpus"
  2. Faire une copie du fichier en entrée (Groovy) → /corpus.xml
  3. (Optionnel) Transformation XSL customisée pour un corpus spécifique (paramétrable depuis le formulaire de la macro) (XSLT patch : par ex. oriflamms-convert-inscriptions-oriflammsxml.xsl) → /corpus.xml
  4. Insertion des milestones manquants (milestone[@unit=“surface”] pour chaque image, cb et lb systématiques) (XSLT patch : oriflamms-patch-milestones.xsl) → /texts/corpus-w.xml
  5. Tokenisation par mot (XSLT simple : oriflamms-tokenize-words.xsl) → /texts/corpus-w.xml
  6. Re-tokenisation avec regexp (Groovy patch) → /texts/corpus-w.xml
    </w><w( [^>]*)?> --> (rien)
    </w>\s*(<milestone[^>]*>)?\s*(<pb[^>]*>)?\s*(<cb[^>]*>)?\s*(<lb[^>]*break="no"[^>]*>)\s*<w[^>]*>  --> $1$2$3$4
  7. Balisage des parties de mots coupés par des sauts de ligne, etc. ; suppression des balises <w> et <pc> imbriquées (XSLT patch : oriflamms-patch-words-with-lb.xsl)
  8. Identification et numérotation des milestones et des mots (milestone[@unit=“surface”], pb, lb, lb, w, pc, seg[@type=“wp”])
    • XSLT patch : oriflamms-addxmlid.xsl → /texts/corpus-w.xml
    • Groovy patch
      • milestestone[@unit=“surface”]
        • si absent, ajouter @xml:id=surf_$corpusID_$imgID où
          • corpusID = nom du fichier de transcription sans le suffixe -w et sans extension
          • imgID = valeur de @facs sans extension (i.e. nom du fichier image) filtré pour éliminer les caractères non valides dans les identifiants XML
        • si absent, ajouter @n (comptage de 1 à n sur tout le document)
      • pb
        • si absent, ajouter @xml:id=page_$corpusID_$N où
          • N = compteur de 1 à n sur tout le document
          • corpusID = nom du fichier de transcription sans le suffixe -w et sans extension
        • si absent, ajouter @n (comptage de 1 à n sur tout le document)
      • cb
        • si absent, ajouter @xml:id="col_$pageID_$N" où
          • pageID = identifiant du pb précédent sans le préfixe “page_”
          • N = compteur de 1 à n à partir du pb précédent
        • si absent, ajouter @n (comptage de 1 à n à partir du pb précédent)
      • lb
        • si absent, ajouter @n="$NCurentLine" où
          • NCurentLine se remet à 1 à chaque cb
          • si type=“rejet”, afficher warning “no n attribute provided for 'rejet' line break”
        • si @n a une valeur non numérique (par ex. “3bis”, “r”), l'attribut est copié dans la sortie, NCurrentLine n'est pas incrémenté
        • sinon NCurentLine prend sa valeur
        • si @type=“rejet”
          • si absent, ajouter @xml:id="line_$colID_$Nlb_r$Nrejet", où
            • colID = identifiant du cb précédent sans le préfixe “col_”
            • Nlb = valeur de l'attribut @n
            • Nrejet = compteur des lb[@type=“rejet”] (se remet à 1 à chaque cb)
          • si absent, ajouter @corresp="#$correspLineID" où
            • correspLineID = line_$colID_$Nlb (soit @xml:id sans le suffixe “_r[0-9]+”)
        • sinon
          • si absent, ajouter @xml:id="line_$colID_$Nlb" où
            • colID = identifiant du cb précédent sans le préfixe “col_”
            • Nlb = compteur de 1 à n à partir du cb précédent (avec et sans @type=“rejet”)
      • w
        • si absent, ajouter @xml:id="w_$corpusID_$N" où
          • corpusID = identifiant du corpus
          • N = compteur de 1 à N pour tous les w et pc mélangés dans tout le document
      • pc
        • si absent, ajouter @xml:id="pc_$corpusID_$N" où
          • corpusID = identifiant du corpus
          • N = compteur de 1 à N pour tous les w et pc mélangés dans tout le document
      • seg[@type=“wp”]
        • si absent, ajouter @xml:id="wp_$wordID_$N" où
          • wordID = identifiant du mot “parent” sans le préfixe w_
          • N = compteur de 1 à N, se remet à 1 dans chaque mot
  9. Tokenisation par caractère (XSLT simple : oriflamms-tokenize-chars-1-tag.xsl) → /texts/corpus-c.xml (w tjs présents)
  10. Identification des caractères (XSLT patch : oriflamms-tokenize-chars-2-identify.xsl) → /texts/corpus-c.xml (w tjs présents)
  11. Création de fichiers zones et de liens (un fichier par surface) (XSLT split : oriflamms-convert-transcriptions-orizones.xsl) /texts/corpus-w.xml → /zones/* et /img_links/*
  12. Création de dossiers (vides) → /ontologies/, /ontologies_links/, /img/
  13. Si le paramètre “Image Directory” est renseigné dans le formulaire, copier les fichiers qu'il contient → /img/
  14. Si le paramètre “Create archive” est coché, alors créer une archive ZIP avec l'extension “.oriflamms”

Prototypes

Version finale

Documentation

Utilisateur

Développeur

Recette

État courant

Qui Quand Quoi

public/specs_production_projet_oriflamms.txt · Dernière modification : 23/06/2016 11:41 de matthieu.decorde@ens-lyon.fr