Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
public:specs_ajout_moteur_resolution_annotation [2019/05/23 11:18] matthieu.decorde@ens-lyon.fr |
public:specs_ajout_moteur_resolution_annotation [2019/05/23 11:32] (Version actuelle) matthieu.decorde@ens-lyon.fr |
||
---|---|---|---|
Ligne 11: | Ligne 11: | ||
* XQuery : finesse d'expression de contraintes sur les balises XML source ou pivot (gestion min/maj, accents, etc.), langage XPath de navigation dans l'arbre DOM | * XQuery : finesse d'expression de contraintes sur les balises XML source ou pivot (gestion min/maj, accents, etc.), langage XPath de navigation dans l'arbre DOM | ||
* TIGERSearch : langage de requête adapté à la syntaxe, assistant graphique de construction de requête | * TIGERSearch : langage de requête adapté à la syntaxe, assistant graphique de construction de requête | ||
+ | * URS | ||
Moteurs intégrables : TIGERSearch, XSLT, XQuery, SPARQL, SQL... | Moteurs intégrables : TIGERSearch, XSLT, XQuery, SPARQL, SQL... | ||
Ligne 26: | Ligne 27: | ||
====== 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 148: | ||
* à 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}} | ||
- | * 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 ===== | ||
==== Index ==== | ==== Index ==== |