Liste de liens :
Liste de liens :
Augmenter les fonctionnalités de TXM en combinant des moteurs de résolution de requêtes sur annotations.
Chaque moteur travaille sur son propre système d'annotation avec son propre langage de requête et le résultat est obtenu par combinaison des contraintes de sélection retournées par chaque moteur.
L'intérêt pour l'utilisateur est de pouvoir utiliser les forces (potentiel, ergonomie) de chaque langage de requêtes et du moteur associé. Par exemple :
Moteurs intégrables : TIGERSearch, XSLT, XQuery, SPARQL, SQL…
Fonctionnalités concernées, potentiellement toutes les fonctionnalités utilisant déjà CQL :
En amont, les annotations se trouvant dans les sources doivent être rapprochées au moment d'un import (il peut y avoir plusieurs import si on 'ajoute' par exemple des annotations syntaxiques TS à un corpus).
En aval, les contraintes de sélection de positions (tokens) servent à unifier les sélections des différents moteurs.
Si une requête de fait pas référence explicitement à des occurrences, il faut calculer les occurrences sous-jacentes au résultat retourné. Par exemple si on fait une requête XQuery pour construire un sous-corpus à partir de contraintes combinées sur différents niveaux de structures, il faut calculer quelles occurrences se trouvant dans les structures sélectionnées. Si ce n'est pas possible, il faudra que l'utilisateur exprime obligatoirement une requête se résolvant à des occurrences pour que le mécanisme fonctionne. Ceci peut être un premier mode de fonctionnement avant d'étendre au calcul automatique d'occurrences sous-jacentes.
Une extension qui propose des services de recherche implémente les classes :
Le SearchEngine doit être déclaré dans le fichier plugin.xml de l'extension.
Pour pouvoir combiner l'usage simultané de plusieurs moteurs, on peut étendre les UI actuelles. Pour la zone de saisie de requête CQL actuelle, par exemple dans l'Index, cela peut donner :
Remarques :
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 :
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
Les débuts et fins des Unités correspondent exactement aux positions de mots ce qui rend l'alignement avec le corpus CQP direct. Le début d'implémentation URSQL (dans la classe AnalecUtils des macros) permet déjà de sélectionner certaines unités et de faire des intersections avec les match du corpus.
L'implémentation URSQL V0 ne permet pas de choisir sur quel type d'annotation (Unité ou Relation ou Schéma) la sélection se fera → une première version ne travaillera que sur les unités.
Le moteur “URS” est disponible depuis TXM 0.8.2 pour les commandes Concordances et Index.
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 commence par faire une macro ApplyXQuery qui prend en paramètres :
Et qui affiche l'output dans la console ou dans le fichier de sortie.
Voir une des trois API XQuery Java de SAXON.
Macro ApplyXQueryMacro.groovy
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"]
Préparation :
Faire des recherches “Entity” en Concordance ou Index sur VOEUX et VOEUX/0001 (les résultats ne devraient contenir que les annotations sur le texte 0001)
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.