Liste de liens :
Liste de liens :
Ceci est une ancienne révision du document !
Augmenter les fonctionnalités de TXM en ajoutant un nouveau moteur de résolution d'annotations.
Moteurs intégrables : TIGERSearch, XSLT, XQuery, SPARQL, SQL…
Pour les fonctionnalités concernées :
On ajoute des contraintes de sélection de positions (tokens) à l'aide du moteur supplémentaire.
On s'appuie sur TIGERSearch (TS) pour démontrer la faisabilité.
On utilise une stratégie de couplage basée sur les tokens. Soit :
Pour un corpus SRCMF, on utilise le couplage B.
On utilise le moteur supplémentaire comme système de contraintes de sélection qui s'additionnent à celles de CQP.
La requête TS doit aboutir à des terminaux.
Ce développement est réalisé dans un nouveau chantier “SRCMF” qui contient :
Architecture cible : le corpus TIGERSearch d'un corpus binaire TXM se trouve dans le dossier “tiger”.
Prend un fichier TIGER XML, créé un corpus TIGERSearch et un corpus CQP basé sur les tokens du corpus TIGERSearch → couplage A
Il s'agit de l'automatisation de la procédure d'import décrite ici : https://groupes.renater.fr/wiki/txm-users/public/extensions_alpha#tigersearch.
Prend 1 dossier XML-TXM et 1 dossier XML-TS issu d'une conversion d'annotations SRCMF depuis NotaBene, fait un corpus CQP avec les fichiers XML-TXM et un corpus TIGERSearch avec le fichier du dossier XML-TS. Et fait tout un tas de transformations.
Les 2 corpus sont hébergés dans un corpus binaire TXM.
Prend 1 dossier XML-TXM et 1 dossier XML-TS, fait un corpus CQP avec les fichiers XML-TXM et un corpus TIGERSearch avec le fichier du dossier XML-TS.
Attention : il y a une relation extrêmement forte entre les fichiers sources XML-TXM et XML-TS : les fichiers XML-TXM et XML-TS doivent provenir de Stuttgart (TR).
Les 2 corpus sont hébergés dans un corpus binaire TXM.
Équiper un corpus TXM d'un corpus TIGERSearch :
Étant donnée la liste des terminaux matchés par TS, on fait l'intersection avec la liste des matchs du sous-corpus CQP sur lequel est construit l'index.
requête TS → liste d'identifiants de mots → liste de positions CQP → intersection CQP/Java
Une requête TS retourne une liste d'identifiants de mots (propriété de mot TS “id”).
On augmente l'extension TIGERSearch avec une version modifiée de la commande Index qui s'ouvre avec un champ de requête TIGERSearch à la place du champ CQL habituel (baguette + champ texte).
Pour croiser des contraintes CQL et TS, il faut utiliser des sous-corpus.
Les projections disponibles dans l'index ne sont que celles de CQP.
L'utilisateur ne doit nommer dans la requête qu'un (et un seul) nœud avec la variable #@ (ou #pivot) qui sera à la base du couplage :
Dans l'éditeur d'Index on ajoute des champs de recherche supplémentaires qui vont se combiner (intersection des matchs) en plus de l'intersection avec le sous-corpus à la base de l'Index : (CQL + TIGERSearch QL) + CQL sous-corpus.
→ (ce qui permet d'éviter d'avoir à construire des sous-corpus à durée de vie limitée)
On ajoute la coloration TIGERSearch.
On donne accès à l'assistant TIGERSearch.
Les projections de propriétés d'objets TS (terminaux et non-terminaux) sont disponibles et mixables.
Les principes de l'Index s'appliquent à la concordance.
Correspond à KNIC 1 (concordance pivot).
On peut marquer les mots non dominés de la séquence contiguë.
Formes de retour au texte possibles :
Recherche de noeuds syntaxiques (terminaux ou non-terminaux) avec l'aide du moteur de résolution de requêtes syntaxiques TIGERSearch : https://groupes.renater.fr/wiki/txm-users/public/extensions_alpha#tigersearch
La plateforme TXM utilise le moteur XSLT 2 Saxon notamment dans les modules d'import XML et la macro ApplyXSL.
L'idée est d'utiliser la transformation de la représentation XML pivot des textes d'un corpus en une liste d'id des mots des textes correspondants à une extraction donnée comme “moteur de recherche” : faisant correspondre une “requête” (une feuille XSL) à une “liste de matches” (de type CQP) interfaçable ensuite avec les commandes prenant en entrée des listes de matches CQP habituellement.
La requête est soit :
La requête (XSL) s'applique soit :
La XSL retourne la liste de tous les identifiants de mots correspondant à la requête d'extraction :
Ensuite le contexte d'appel (une macro pour l'instant) transforme cette liste en requête CQL utilisant des ID ou des positions de mots (et donc avant il faut calculer la liste des matchs CQP équivalente ([start, end], [start, end]…), pour pouvoir faire ensuite une Concordance ou un Index.
Dans une version ultérieure on verra comment pouvoir calculer la Concordance ou l'Index dans la foulée (voir aussi les exemples ci-dessous pour le cas TIGERSearch).
On commence par faire une macro prototype appelée XSL2CQL ou QueryXSL :
La plateforme TXM utilise le moteur XQuery Saxon.
Voici un exemple de script XQuery (getNOM.xq) retournant tous les IDs de mots dont le frpos vaut 'NOM', par exemple dans le corpus TDM80J. Le contexte d'appel du script doit faire en sorte que le répertoire courant soit le répertoire binaire du corpus, de sorte à ce que le chemin 'txm' de l'URI corresponde au répertoire des fichiers XML-TXM du corpus requêté (sinon on peut mettre le chemin absolu dans le paramètre URI de la fonction fn:collection du script). Le script parcourt tous les fichiers '.xml' qui se trouvent dans le répertoire 'txm' :
<matches> { for $t in fn:collection(file:txm?select=*.xml) for $w in $t//tei:w let $pos := $w/txm:ana[@type="#frpos"]/text() where $pos = "NOM" return <match>{$w/@id}</match> } </matches>
On pourrait commencer par faire une macro ApplyXQuery qui prend en paramètres :
Et qui affiche l'output dans la console ou dans le fichier de sortie.
S'appuyer sur les résultats de l'étape 1 pour construire une requête CQL à partir de matches de mots TXM en XQuery.
#pivot:[word=/[Cc][ou]m?me?/ & pos="CONsub"]
[headpos="VERcjg" & cat="Circ"] >R #n:[cat="RelNC"] & #n >L #pivot
[q] expand to q
#pivot:[word=/[Cc][ou]m?me?/ & pos="CONsub"]
[headpos="VERcjg" & cat="Circ"] >R #n:[cat="RelNC"] & #n >L #pivot
[!q]
#pivot:[word=/[Cc][ou]m?me?/ & pos="CONsub"]
[headpos="VERcjg" & cat="Circ"] >R #n:[cat="RelNC"] & #n >L #pivot
Les décomptes doivent correspondre : la somme des fréquences des indexes q et nonq est égale aux fréquences de l'index de SRCMFMADRID.
L'ensemble des requêtes nécessaires est présenté dans ce google doc.
Depuis TXM, après avoir charger le corpus SRCMFMADRID et l'avoir sélectionner. Sélectionner la commande “TS Index - Recette 1” depuis le menu principal “Recettes”.
Comparaison de TSIndex entre 2 corpus CQP+TIGERSearch.
#pivot:[word=/[Cc][ou]m?me?/ & pos="CONsub"]
On crée :
En cochant 'debug' on peut observer le résultat de la XSL dans 'results' :
<?xml version="1.0" encoding="UTF-8"?> <matches> <match> <wRef id="w_tdm80j_1"/> <wRef id="w_tdm80j_2"/> <wRef id="w_tdm80j_3"/> <wRef id="w_tdm80j_4"/> <wRef id="w_tdm80j_5"/> </match> <match> <wRef id="w_tdm80j_8"/> </match> <match> <wRef id="w_tdm80j_11"/> <wRef id="w_tdm80j_12"/> </match> </matches>
La CQL résultat est :
[id="w_tdm80j_11"][]|[id="w_tdm80j_8"]|[id="w_tdm80j_1"][]{4}
La macro et la XSL ont été déposées dans : davs://sharedocs.huma-num.fr/dav.php/@Shares/(948)%20Cactus/(3792)%20Cactus/Projets/Textométrie/TXM/scripts-et-macros/xsl2cql
On reproduit en XSL la requête CQL :
<w src="|Vg.Ps.1.1|Vg.Ct.1.1|" type="|inexactQuotation|inexactQuotation|" subtype="|implicit|implicit|" ana="|null|allusion|">Deo</w>
sur le corpus de Bernard en tenant compte de la contrainte croisée (Vg.Ct.1.1+inexactQuotation+allusion).
On écrit la XSL travaillant directement sur les <seg> source, disponibles dans le XML-TEI TXM pivot.
Les sources utilisées se trouvent dans le répertoire davs://sharedocs.huma-num.fr/dav.php/@Shares/(948)%20Cactus/(3792)%20Cactus/Projets/Sources%20Chrétiennes/BernardXSL/BernardXSL.
Le répertoire davs://sharedocs.huma-num.fr/dav.php/@Shares/(948)%20Cactus/(3792)%20Cactus/Projets/Sources%20Chrétiennes/BernardXSL contient des tableaux de statistiques des éléments seg, note, span, link, ptr et ref.