Outils pour utilisateurs

Outils du site


public:import_xtz

Import XTZ + CSV (XML-TEI Zero)

Objectif

Voir les tickets :

Créer un module interprétant un nombre raisonnable de balises TEI pour :

  • la sélection de métadonnées pas V1
  • la construction de structures internes
  • la segmentation de phrases pas V1
  • la construction de mots étiquetés
    • en proposant notamment la même stratégie de précodage des mots que XML/w+CSV
    • ainsi que la stratégie de catégories de balises de la BFM pour les choix de tokenization
  • la construction d'éditions (pagination, sections, notes…)
  • la construction de sommaires pas V1
  • etc.

Un mécanisme doit également permettre de filtrer/préserver certains éléments (hors-texte) voire aider à faire différentes variantes d'un même corpus (plans textuels).

Un mécanisme doit permettre de déterminer l'ordre des textes à partir d'une métadonnée.

Ce module d'import doit tenir compte des objectifs des deux versions RCP et GWT de TXM. Il faudra unifier les besoins en paramètres d'import.

Spécifications

Copy XML/w+CSV import to XTZ+CSV

  • menu entry
  • scripts in scripts/import

Manage order of texts in the corpus

  • If the metadata.csv file contains a 'textorder' column, the texts are sorted in the alphabetical order of this metadata (case insensitive)
    • empty value goes first
    • if two texts have the same textorder value, they are sorted alphabetically with their filenames (case insensitive)
    • if a text does not have a corresponding metadata line, it is placed at the end
    • if two texts have no corresponding metadata lines, they are sorted alphabetically with their filenames and placed after the texts with metadata (case insensitive)
  • Otherwise, the filename alphabetical order is used (case insensitive)

Add new source directory sub-directories management

Before developing new sections in the parameters form, we represent some new import parameters with new source directories.

All the content of those sub-directories must be copied to the binary corpus by the import module in the end.

‘dtd’ sub-directory

‘css’ sub-directory

Contains the css files to use with HTML pages in editions

‘xsl’ sub-directory

Contains different types of XSL sub-directories (if a directory is absent or empty it is not used)

  • ‘1-split-merge’ sub-subdirectory containing an XSL stylesheet used to split or merge source files to adapt them to the TXM corpus model (1 text = 1 file)
    • this XSL receives an “output-directory” parameter with the URL of a directory to write result files
    • the standard XSL output file of this stylesheet is not used
    • examples: split-texts.xsl or merge-files.xsl
  • ‘2-front’ sub-sub-directory containing the XSL stylesheets to process the sources at the beginning of the import process (replaces the ‘front XSL’ section mecanism). The XSL are applied in the lexicographical order of their file names.
    • examples: txm-filter-teip5-xmlw-preserve.xsl
  • ‘3-posttok’ sub-sub-directory containing the XSL stylesheets to process the xml-txm representation of the sources after the tokenization phase (all words are encoded). The XSL are applied in the lexicographical order of their file names.
    • examples: reduce-caesura.xsl, build-word-ref.xsl
  • ‘4-edition’ sub-sub-directory containing the XSL stylesheets to build the HTML edition from the xml-txm representation using the pagination done by the pager. The XSL are applied in the lexicographical order of their file names. The file name must conform to the following pattern:
    • [order(digit)]-[edition name]-[output type (“html” or “pager”)].xsl
    • example: in order, 1-default-html.xsl, 2-default-pager.xsl, to build the ‘default’ edition followed by, 3-facs-html.xsl, 4-facs-pager.xsl to build the facsimile edition to hold the images
    • all XSL receive the following parameters: “number-words-per-page”, “pagination-element”, “import-xml-path”.
      • Note: this XSL parameters are not mandatory (MD: tested)
    • The XSL file writes the first word ID in each HTML file produced : <meta name="description" content="{id du 1er lmot}"/>. If there is no word in the page, then the “content” value is “w_0”
    • Their file name is used to name the edition produced
    • .*-pager XSL receive an “output-directory” parameter with the URL of a directory to write result files
      • the standard XSL output file of this stylesheet is not used

Modify the import form

  • in the “Tokenizer” section (FR=“Paramètres du segmenteur lexical”), add options :
    • “don't call the word tokenizer”/“Ne pas appeller le segmenteur lexical”
      • default value is “false”
  • add section “Plans textuels” (available only for XTZ import module)
    • Hors-texte : “Liste des balises codant le hors-texte” (transform to Regexp)
      • EN: Outside-text : “List of tags encoding the outside-text (no structure or word content indexed, no structure or word content edited in TXM)”
      • Balise “no-structure-index&no-word-index&no-structure-edition&no-word-edition”
        • tags and their content deleted from cwb corpus and editions
    • Hors-texte à éditer : “Liste des balises codant le hors-texte à afficher dans l’édition)” (transform to Regexp)
      • EN: Outside-text-to-edit : “List of tags encoding the outside-text to edit (no structure or word content indexed, structure and word content edited in TXM)”
      • Balise “no-structure-index&no-word-index&structure-word-edition&word-edition” : hors-texte & édition
        • content deleted from the cwb corpus
          • in the edition
    • Word element : default value is “w”
      • in first version this value is not a regular expression
    • Milestone elements : a list of milestones elements (comma separated values) to be indexed with 4 word properties :
      • <milestone>start
      • <milestone>end
      • <milestone>id
      • New! <milestone>n (not implemented)
  • remove “front XSL” section from XTZ import module parameters
    • note: “add parameter” is broken
  • move “font” section after “editions” and before “commands”
  • modify Éditions section
    • “Editions” → “Éditions”
    • add ‘images’ URI declaration (see below)
[x] Construire l'édition

Nombre de mots par page [500]    Élément de pagination [pb]
Répertoire local d'images de facsimilés [...]

Édition

Édition "default"

Voir la Documentation utilisateur XTZ+CSV pour l'état actuel de la construction de l'édition par défaut.

Édition facsimilés : "facs"

Édition optionnelle si l'utilisateur souhaite afficher les facsimilés de son édition.

2 cas possibles :

  • le corpus a déjà codé dans des éléments “pb” et l'attribut “facs” l'URL des images
  • le corpus a déjà codé les éléments “pb”
    • les images sont distantes
    • les images sont locales

Modifications à apporter au formulaire d'import :

  • ajouter un bouton “construire une édition facsimilés
  • ajouter un champ “dossier des images”. 2 options :
    • If the images are online, the @facs in the source files must provide an absolute URL starting with “http”
      • note: to avoid puclic access, the images file access can be controled via a htaccess file or served via a Servlet
    • If the images are local, the @facs in the source files must provide a relative URL as follows “images_corpora/<corpus name>/<file name>” and the images must be copied to the corresponding folder in the binary corpus (HTML/<CQPCORPUSNAME>/facs/images_corpora/<corpus name>), cf. specs_archi_fichiers_editions
    • another solution may be to embbed images locally in HTML pages
      <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." /> 
[x] Construire les éditions

   Pagination :
   [x] Nombre de mots par page [500]
   [ ] Élément de pagination [pb]   (V2 : XPath, e.g. //milestone[@type='surface'] )

   Adresses des images de facsimilé :
   ( ) pas d'images
   (x) dans les @facs de l'élément de pagination
   ( ) construites à partir d'un répertoire [       ] [...]
   
   Construire les éditions par XSL
   
   ...
   

Éditions synoptiques

Voir la page https://groupes.renater.fr/wiki/txm-info/public/specs_production_editions_synoptiques.

Les macros XSLEditionBuilder et XTZEditionBuilder ont été intégrées dans le module XTZ.

transfert XSL -> Pager à réaliser

(copié à partir de

https://groupes.renater.fr/wiki/txm-info/public/specs_production_editions_synoptiques#macro_xtzeditionbuilder_cette_macro_sera_finalisee_plus_tard)

  • cette édition est équivalente à celle produite par la feuille de style txm-edition-xmltok-bvh.xsl, qui effectue les transformations suivantes :
    • tei:text –>
      • référence de début de page
      • tableau des métadonnées
    • tei:p|tei:ab|tei:lg –> html:p + addClass (voir ci-dessous)
    • tei:head –> html:p + class=head
    • tei:lb –> html:br (à préciser) + class=lb + @n=n° de lb si absent
      • Créer html:a si multiple de 5 ou si n'est pas un nombre
    • pageBreakElement (tei:pb par défaut)
      1. affiche les notes de la page qui précède
      2. coupe la page
      3. affiche le numéro de la page qui suit (délégué à l'auteur)
        • utiliser @n ou @facs ou [NN] si aucun
    • tei:w –> html:span avec @id, @title (tous les attributs du w concaténés) + espace blanc ou non selon les règles
    • tei:note
      • Créer une référence html:a avec le numéro de la note (global au document), @title=contenu de la note, @href=contenu de la note en bas de page
      • Stocker le contenu des notes
      • Puis au pb les écrire (voir pb)

        NON IMPLÉMENTÉ À PARTIR D'ICI
    • le reste : on propage l'élément
    • addClass = concatenation de
      1. @class=local-name(),
      2. si @type ajouter @type
      3. si @subtype ajouter @subtype
      4. si @rend ajouter @rend

Spécification du Pager (Groovy qui produit le HTML)

À faire

  • styler les éléments en détail
    • élément → span@class
  • gérer les conflits de CSS dans le contexte des portails (les portails utilisent des éditions produites par la version pour poste)

Liste des éléments gérés par le module

Élément text
  • crée un élement 'h3' avec @id
  • itère sur ses attributs pour afficher un tableau : nom + valeur
  • saute une ligne
Élément p
  • crée un élément 'p'
  • si @rend est renseigné il est utilisé pour remplir p@class
Élément lb
  • crée un élément 'br'
Élément graphic
  • crée un élément 'img' dans une 'div'
  • attribut 'src' ← graphic@url
  • attribut 'align' ← “middle”
Élément ref
See especially <ref target="http://www.natcorp.ox.ac.uk/Texts/A02.xml#s2">the second
sentence</ref>
  • crée un élément 'a'
  • attribut 'href' ← ref@target
  • attribut 'target' ← “_blank”
Élément de pagination indiqué dans le paramètre 'pageBreakTag'

Par défaut 'pb' dans l'initialisation du champ “Page break tag” du formulaire d'import

  • Si 'pageBreakTag' est vide, il ne faut couper les pages par un élément
  • Si non
    • coupe la page avant cet élément en refermant les balises ouvertes puis en les ré-ouvrant
    • ajoute un numéro de page sur la nouvelle page : crée un élément p centré dont le texte est affiché en rouge est : ”- @n -“.
Élément w
  • créé un élément 'span'
  • attribut 'id'
  • attribut 'title' avec les propriétés du mot

Later

* Integrate the XMLText2MetadataCSV macro content to pull metadata from teiHeaders directly.

Autres éléments de méthode

  • déplacer une partie du code du module XML/w+CSV dans ce module (dont la construction d'éditions), et laisser XML/w+CSV plus minimaliste ;
  • copier une partie du code du module d'import DOC/ODT/RTF dans ce module (dont la construction d'éditions : gestion d'images, de liens hypertextes…) pas V1
  • intégrer la stratégie de tokenization par double-import BFM/BVH dans ce module ;
  • intégrer la stratégie de construction d'éditions HTML tierces dans ce module (éditions des portails).

(Voir la spéc Éditions / Navigation dans les pages)

  • MD : Les Edition et Page sont construites et déclarées lors de l'étape pager.
    • L'édition par défaut ne fait que compter les pages et ne récupère pas d'information dans le code des textes
  • AL :
    risque de conflits en cas d'utilisation des attributs (pb/@n ou pb/@xml:id) pré-encodés dans les sources

Solution

Plans textuels

Synthèse générale

to index to edit Comments
structure word structure word
Normal-text yes yes yes yes Default behavior: all source content is imported
Ignored-structures-and-structures-not-to-edit no yes no yes Structures ignored: for example to simplify encoding: persname / forename → persname - can be done by front XSL
Ignored-structures-and-structures-to-edit no yes yes yes Structures to edit only: for example for rendering (italics, bold…) to ignore as structures but render in editions
Ignored-structures-and-words-to-edit (Outside-text) no no yes yes Structures and content to edit only: for example for notes
Ignored-structures-and-words (Outside-text) no no no no Structures and content to ignore: for example encoding comments or technical or infrastructural information

Étape 1 : TXM 0.7

  • corps-du-texte / text-body : texte à indexer (par CQP) et à éditer (en HTML) (comportement par défaut → pas de paramétrage “explicite”)
  • paratexte en-ligne / inline-paratext = hors texte à éditer : le texte à ne pas indexer mais à représenter au fil du texte dans l'édition, en tenant compte de ses sous-éléments (eg <front>, <head>)
  • paratexte hors-ligne / standoff-paratext = notes et marginalia : le texte à ne pas indexer mais à représenter sous forme de note au fil du texte, de note de bas de page, de marginalia ou de note de fin de chapitre dans l'édition et d'appel de note dans le corps du texte (eg <note>, <note place=“page-foot”>, <note place=“page-left”>, <note place=“chapter-end”>)
  • hors-texte / out-of-text : le contenu à ne pas indexer et à ne pas représenter dans l'édition (eg <teiHeader>)

Ordre d'affichage dans le formulaire d'import :

  • Hors texte à éditer / Out of text to edit (eg <head>, <front>, <back>…)
  • Notes / Notes (eg <note>)
  • Hors texte / Out of text (eg <teiHeader>)
  • Bornes / Milestones

Étape 2 : TXM 0.7.9

Ordre d'affichage dans le formulaire d'import :

  • Hors texte / Out of text (eg <teiHeader>)
  • Hors texte à éditer / Out of text to edit (eg <head>, <front>, <back>…)
  • Notes elements(eg <note>)
  • Éléments milestones / Milestones

Étape 3 : TXM 0.8.1

Plans textuels disponibles :

  • Hors texte / Out of text : valeur par défaut=teiHeader
  • Hors texte à éditer / Out of text to edit (eg <head>, <front>, <back>…) : pas de valeur par défaut
  • Notes : valeur par défaut=note
  • Bornes / Milestones / Milestones : pas de valeur par défaut

Déplacer la déclaration des éléments à mettre en forme comme note de bas de page dans la section “Édition”.

Si les notes ne doivent pas être indexées, il suffit d'ajouter l'élément dans 'Hors texte à éditer'.

Syntaxes de sélection supplémentaires
  • niveau 1 : ajouter une syntaxe “balise@attribute=valeur” en plus de “balise_tout_court”
Mélange “à la URSQL” entre :
  • balise
  • balise@attribute
  • balise@attribute=valeur

    → Exemple : teiHeader,gap@style,div@type=“errata”
  • niveau 2 : ajouter une syntaxe “balise/enfant”
  • niveau 3 : ajouter la syntaxe XPath (à implémenter en XSL)

État de l'art

Exemple de sémantique d'édition de l'import XML/W+CSV de TXM 0.7.5

Element text

    crée un élement h3 avec @id
    itère sur ses attributs pour afficher un tableau : nom + valeur
    saute une ligne

Element head

    crée un élément h2 avec le contenu de la balise head

Element note

    crée un span contenant le texte ”[*]” en rouge avec un tooltip qui contient le contenu des w/form et du texte hors w
        le contenu des notes est normalement tokenisé et indexé par le moteur de recherche (mais le retour au texte est impossible à partir de concordances)
        pour ne pas indexer le contenu des notes, il faut ajouter une ligne “ignoredelements=note” dans le fichier import.properties (cf. Le Manuel de référence TXM)
        dans ce cas, on peut dupliquer les notes lors de la préparation du corpus et placer les doublons à la fin du document dans <p rend=“note”>

Element graphic

    si @url est renseigné, crée une balise img dans une balise div et utilise graphic@url pour renseigner img@src

Elements lg, p et q

    crée un élément p
    si @rend est renseigné il est utilisé pour remplir p@class

Elements lb et br

    crée un élément br

Element pb (ou l'élément de pagination indiqué dans import.properties)

    coupe la page en refermant les balises ouvertes puis en les ré-ouvrant
    crée un élément p centré dont le texte est affiché en rouge est : ”- @n -”.

Étapes de développement

Étape initiale, TXM 0.7.8

cf. ticket #1548

  • duplication du module xml/w
  • création de points d'appel xsl multiples
    • front
    • post-tokénisation
    • édition(s)

Prototypes

A. Atelier CAHIER édition analytique 2014
B. DEMM Workshop 2015-03
C. Workshop TEI 2015-10

Étapes suivantes

New Features

  1. Use $pagination-element and not pb when building the facs edition, see -2146.
  2. Simplify producing multi-facetted editions (from XML-TXM format)
    • it is currently very complicated to keep tags (e.g page breaks) inside non default edition facet
  3. When 'Tokenize' option is off, check that all word-elements have @id
  4. Handle XML-TXM as input format
    • currently XML-TXM can be imported via XTZ module (word properties and default editions are correct) but injection of morpho-syntactic annotation (when annotating with TreeTagger) is broken due to nesting txm:form elements (from the source and from the annotation process)
    • TXM should detect txm:form and txm:ana child nodes of the word element and transfer them correctly to XML-TXM
  5. Handle nesting word-level elements
    • currently, if you have num/w in the source file, XTZ nests w elements in the XML-TXM file (num/w → w/w)
    • if nesting word-level elements are detected, only the lowest level should be considered as token by TXM
  6. implement alternative ways of defining text order in the corpus
    1. text/@textorder
    2. textorder XPath
    3. textorder column in metadata.csv (currently implemented)
  7. implement defining metadata through XPath (as in current TEI-BFM module)
  8. add @n to milestone element indexation (cf. -1597, -2162)
    • start n numbering at 1 for ALL automatic @n
  9. help build references
    • document different XSL patterns
    • document different equivalent Groovy patterns (DOM & SAX)
    • design user input parameter interface and options (ref pattern, eg ”%s, p. %03d“ + title + pageNum)
  10. currently, the footnotes are outside the html element → put it inside a div@class=“footnotes” at the end of the body

Synchronize Pager with XSL editions

  • Current XSL edition processing is :
    • tei:text –>
      • référence de début de page
      • tableau des métadonnées
    • tei:p|tei:ab|tei:lg –> html:p + addClass (voir ci-dessous)
    • tei:head –> html:p + class=head
    • tei:lb –> html:br (à préciser) + class=lb + @n=n° de lb si absent
      • Créer html:a si multiple de 5 ou si n'est pas un nombre
    • tei:pb
      1. affiche les notes de la page qui précède
      2. coupe la page
      3. affiche le numéro de la page qui suit (délégué à l'auteur)
        • utiliser @n ou @facs ou [NN] si aucun
    • tei:w –> html:span avec @id, @title (tous les attributs su w concaténés) + espace blanc ou non selon les règles
    • tei:note
      • Créer une référence html:a avec le numéro de la note (global au document), @title=contenu de la note, @href=contenu de la note en bas de page
      • Stocker le contenu des notes
      • Puis au pb les écrire (voir pb)
    • le reste : on propage l'élément enrobé d'un html:span ayant un attribut @class construit selon l'algorithme suivant :
    • concatenation séparée de tirets '-' de :
      1. @class=local-name()
      2. si @type ajouter @type
      3. si @subtype ajouter @subtype
      4. si @style ajouter @style
      5. si @rend ajouter @rend

Documentation utilisateur

Recettes

0.7.8 alpha

  • récupérer les sources dans SpUV/qgraal_cm_xtz
  • lancer l'import du répertoire des sources
  • résultat attendu :
    • 1 page devient 1 texte (xsl front split)
    • édition synoptique (default + facs)
    • édition stylée

0.7.8 beta

0.7.8

BP : Retours d'expérience import Perseus, mai 2017

CB-AL : Retours d'expérience import Piscibus, mai 2017

Le 'hors texte à éditer' pose problème : la présence d'un élément provoque à tort la tokenisation à l'intérieur.

Le 'hors texte' empêche certains traitements ultérieurs de travailler, exemple : récupération des métadonnées depuis le teiHeader.

Le Tokeniser met systématiquement des sauts de ligne qui peuvent être gênants (voir #2184).

Requests

User Request 1

Request

Question #TXM ! Est-ce qu'il y a des ressources aidant à créer un corpus de poésie avec XML/w, en modifiant la vue “édition” avec le fichier “txm.css” pour montrer, par exemple, les sauts de ligne (<l>) et les mots en italiques (<w rend=“italics”>) correctement? @txm_ See https://twitter.com/christof77/status/1028950454938599424

Answer

public/import_xtz.txt · Dernière modification: 2019/07/29 15:56 par slh@ens-lyon.fr