Outils pour utilisateurs

Outils du site


public:specs_ajout_moteur_resolution_annotation

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
public:specs_ajout_moteur_resolution_annotation [2019/05/23 11:17]
matthieu.decorde@ens-lyon.fr
public:specs_ajout_moteur_resolution_annotation [2019/05/23 11:31]
matthieu.decorde@ens-lyon.fr
Ligne 26: Ligne 26:
  
 ====== Solution ====== ====== Solution ======
 +
 +
 +===== Architecture des moteurs =====
 +
 +==== Architecture du code ====
 +
 +Une extension qui propose des services de recherche implémente les classes :
 +  * "​SearchEngine"​ : résout sous la forme d'une liste de "​Match",​ une "​Selection",​ une requête "​Query"​ pour un corpus "​CorpuBuild"​
 +  * "​Query"​ : type la requête pour identifier le moteur à utiliser
 +  * "​Selection"​ : décrit une liste de "​Match"​
 +  * "​Match"​ : décrit un start, end et éventuellement un target
 +
 +Le SearchEngine doit être déclaré dans le fichier plugin.xml de l'​extension.
 +
 +==== UI ====
 +
 +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 :\\ {{:​public:​combinaison-de-moteurs-ui.png?​600|UI de combinaison de moteurs}}
 +  * A) la zone de saisie de base, composée :
 +    * de la désignation du moteur de résolution concerné
 +    * de la zone de saisie
 +    * de contrôles de changement de taille de la zone de saisie
 +    * d'​ajout de requête supplémentaire
 +  * B) on peut choisir à gauche le moteur de résolution correspondant à la requête saisie. Dans cet exemple on est passé du moteur CQP au moteur XQuery
 +  * C) on peut augmenter ou réduire la taille de la zone de saisie. Certains langages de requêtes ont besoin d'​espace pour la saisie
 +  * D) on ajoute des requêtes pour combiner avec d'​autres moteurs ou avec le même moteur avec un bouton [+]. Par défaut les requêtes sont combinées (&) mais peuvent être des alternatives (|). Un bouton [-] permet de supprimer une requête.
 +
 +Remarques :
 +  * la possibilité D) permet d'​étendre l'​Index à n requêtes CQL -> il faut définir les fonctionnalités correspondantes,​ notamment en utilisant l'​expression de l'​alternative (|)
 +  * l'​interface d'​ajout de requêtes ressemble à celle de la Progression,​ mais pour cette dernière il faut une double interface d'​ajout (ajout de requêtes + ajout de requêtes par moteur)
 +  * l'​interface doit bien sûr comprendre le bouton d'​accès à l'​assistant de saisie de chaque moteur pour une requête donnée
 +
 +===== XSLT =====
 +
 +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 :
 +  * V1) un fichier XSL complet donné en paramètre ou son contenu édité dans un éditeur XML de TXM ;
 +  * V2) un bout de la XSL saisi dans un champ de paramètre de macro ou de commande. La XSL est finalisée avant l'​appel de la XSL ;
 +  * V3) un bout de la XSL utilisant des fonctions XSL et des éléments de syntaxe XQuery (peut-être plus concis qu'une série de templates comme ci-dessus) saisi dans un champ de paramètre de macro ou de commande. La XSL est finalisée avant l'​appel de la XSL ;
 +
 +La requête (XSL) s'​applique soit :
 +  * V1) à un fichier XML-TEI TXM de corpus binaire (contenant toutes les structures TEI d'​origine + les mots avec @id et annotés) ;
 +  * V2) à un répertoire '​txm'​ contenant les fichiers
 +
 +La XSL retourne la liste de tous les identifiants de mots correspondant à la requête d'​extraction :
 +  * soit sous forme XML : <​matches><​match><​wRef id="​ID1"/><​wRef id="​ID2"/>​...</​match>​...<​matches>​
 +  * soit sous forme TXT : un ID de mot par ligne
 +
 +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 :
 +  * prenant comme paramètres :
 +    * une sélection de corpus dans la vue Corpus ;
 +    * un bout de requête XSL ou le chemin vers une feuille XSL complète
 +  * retournant une CQL de sélection des mots dont la liste des IDs est retournée par la XSL
 +
 +===== TIGERSearch =====
  
 On s'​appuie sur TIGERSearch (TS) pour démontrer la faisabilité. On s'​appuie sur TIGERSearch (TS) pour démontrer la faisabilité.
Ligne 86: Ligne 147:
   * à l'aide d'une commande "​Lier/​Ajouter/​Charger"​ lancé sur un corpus sélectionné dans la vue Corpus et une archive d'un corpus TIGERSearch.   * à l'aide d'une commande "​Lier/​Ajouter/​Charger"​ lancé sur un corpus sélectionné dans la vue Corpus et une archive d'un corpus TIGERSearch.
  
-==== UI ==== 
  
-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 :\\ {{:​public:​combinaison-de-moteurs-ui.png?​600|UI de combinaison de moteurs}} +==== Index ====
-  * A) la zone de saisie de base, composée : +
-    * de la désignation du moteur de résolution concerné +
-    * de la zone de saisie +
-    * de contrôles de changement de taille de la zone de saisie +
-    * d'​ajout de requête supplémentaire +
-  * B) on peut choisir à gauche le moteur de résolution correspondant à la requête saisie. Dans cet exemple on est passé du moteur CQP au moteur XQuery +
-  * C) on peut augmenter ou réduire la taille de la zone de saisie. Certains langages de requêtes ont besoin d'​espace pour la saisie +
-  * D) on ajoute des requêtes pour combiner avec d'​autres moteurs ou avec le même moteur avec un bouton [+]. Par défaut les requêtes sont combinées (&) mais peuvent être des alternatives (|). Un bouton [-] permet de supprimer une requête.+
  
-Remarques : +Étant donnée ​la liste des terminaux matchés par TSon fait l'intersection avec la liste des matchs du sous-corpus CQP sur lequel est construit ​l'index.
-  * la possibilité D) permet d'​étendre l'​Index à n requêtes CQL -> il faut définir les fonctionnalités correspondantesnotamment en utilisant ​l'expression de l'​alternative (|) +
-  * l'​interface d'​ajout de requêtes ressemble à celle de la Progression,​ mais pour cette dernière il faut une double interface d'​ajout (ajout de requêtes + ajout de requêtes par moteur) +
-  * l'interface doit bien sûr comprendre le bouton d'​accès à l'​assistant de saisie de chaque moteur pour une requête donnée+
  
-===== XSLT =====+requête TS -> liste d'​identifiants de mots -> liste de positions CQP -> intersection CQP/Java
  
-La plateforme TXM utilise le moteur XSLT 2 Saxon notamment dans les modules ​d'import XML et la macro ApplyXSL.+Une requête TS retourne une liste d'identifiants de mots (propriété de mot TS "​id"​).
  
-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.+=== V1 ===
  
-La requête est soit : +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). 
-  * V1) un fichier XSL complet donné en paramètre ou son contenu édité dans un éditeur XML de TXM ; +
-  * V2) un bout de la XSL saisi dans un champ de paramètre de macro ou de commande. La XSL est finalisée avant l'appel de la XSL ; +
-  * V3) un bout de la XSL utilisant des fonctions XSL et des éléments de syntaxe XQuery ​(peut-être plus concis qu'une série de templates comme ci-dessussaisi dans un champ de paramètre de macro ou de commandeLa XSL est finalisée avant l'​appel de la XSL ;+
  
-La requête (XSL) s'​applique soit : +Pour croiser des contraintes CQL et TS, il faut utiliser des sous-corpus.
-  * V1) à un fichier XML-TEI TXM de corpus ​binaire (contenant toutes les structures TEI d'​origine + les mots avec @id et annotés) ; +
-  * V2) à un répertoire '​txm'​ contenant les fichiers+
  
-La XSL retourne la liste de tous les identifiants de mots correspondant à la requête d'​extraction : +Les projections disponibles dans l'​index ne sont que celles ​de CQP.
-  * soit sous forme XML : <​matches><​match><​wRef id="​ID1"/><​wRef id="​ID2"/>​...</​match>​...<​matches>​ +
-  * soit sous forme TXT : un ID de mot par ligne+
  
-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 ​([startend], [start, end]...)pour pouvoir ​faire ensuite une Concordance ou un Index.+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 : 
 +  * si le nœud du match est un terminal (token) on l'​utilise 
 +  * si le nœud du match est un non-terminalon utilise tous les terminaux qu'il domineLa séquence des terminaux correspondante n'est pas construite(il faut donc, si nécessaire, faire attention aux décomptes de tokens dans l'Index dans les cas de séquences)
  
-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).+=== V2 === 
 + 
 +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) 
 + 
 +=== V3 === 
 + 
 +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. 
 + 
 +==== Concordances ==== 
 + 
 +Les principes de l'​Index s'​appliquent à la concordance. 
 + 
 +=== V1 === 
 + 
 +Correspond à KNIC 1 (concordance pivot). 
 + 
 +=== V2 === 
 + 
 +On peut marquer les mots non dominés de la séquence contiguë. 
 + 
 +=== V3 === 
 + 
 +Formes de retour au texte possibles : 
 +  * retour ​dans une vue synoptique verticale qui comprend : 
 +    * l'​édition des arbres syntaxiques contenant les mots de la page d'​édition ​(zoom + pan). 
 +    * la page d'​édition "​default"​ 
 +  * la page d'​édition "​default"​ 
 +  * l'​édition des arbres syntaxiques contenant ​les mots de la page d'​édition (zoom + pan). 
 + 
 + 
 +==== TIGERSearch ​==== 
 + 
 +Recherche de noeuds syntaxiques (terminaux ou non-terminauxavec l'aide du moteur de résolution de requêtes syntaxiques TIGERSearch : [[https://​groupes.renater.fr/​wiki/​txm-users/​public/​extensions_alpha#​tigersearch]]
  
-On commence par faire une macro prototype appelée XSL2CQL : 
-  * prenant comme paramètres : 
-    * une sélection de corpus dans la vue Corpus ; 
-    * un bout de requête XSL ou le chemin vers une feuille XSL complète 
-  * retournant une CQL de sélection des mots dont la liste des IDs est retournée par la XSL 
  
 ===== URS (Unité Relation Schema) ===== ===== URS (Unité Relation Schema) =====
public/specs_ajout_moteur_resolution_annotation.txt · Dernière modification: 2019/05/23 11:32 par matthieu.decorde@ens-lyon.fr