Outils pour utilisateurs

Outils du site


public:specs_subcorpus

Sous-corpus

Les sous-corpus sont des sélections de mots d'un corpus (principal ou racine) ou d'un sous-corpus :

  • les sous-corpus sont implémentés par CQP par une liste de matchs
  • un match est une séquence de mots contigus définie par deux positions : du mot de début au mot de fin (de start à end, ou 'start-end')
  • un match peut également correspondre à une séquence élémentaire ne contenant qu'un seul mot (start-end=start) : c'est-à-dire à un seul mot
  • un corpus principal est implémenté par une liste singleton contenant un seul match allant du premier au dernier mot des textes du corpus
  • un sous-corpus est implémenté par une liste singleton d'un seul match ou par une liste de plusieurs matchs
  • CQP optimise la gestion des listes de matchs en les ordonnant par positions
  • les matchs d'une liste de matchs ne se recouvrent pas

Expérimentations

  • le script utilitaire CQPUtils.groovy fournit des méthodes de manipulation de listes de matchs. Voir aussi la macro ListMatches.

Règles de tomizof1) :

  1. un sous-corpus est complètement inclus [SLH ou égal ?] dans son parent 2)

Construction de sous-corpus

a) Par requête CQL

La requête produit la liste de matchs définissant le sous-corpus.

b) Par combinaison de sous-corpus avec des opérateurs d'intersection, union et différence

CQP permet de combiner des sous-corpus avec les opérateurs union, inter et diff.

TXM commence à y donner accès, voir les tickets ;

Cependant les opérateurs natifs union, inter et diff de CQP ne travaillent qu'avec des matchs et sont incapables de segmenter ou de fusionner3) des matches.

[SLH : feature] il serait très intéressant d'augmenter la sémantique des opérateurs existants pour obtenir des opérateurs aux résultats plus “intuitifs” et surtout plus utiles aux opérations sur les sous-corpus d'utilisateurs de TXM → voir l'option coalesce des spécifications des nouvelles commandes ensemblistes TXM.
Il y aurait également des applications à d'autres commandes comme les Concordances calculées à partir de lignes d'Index (les pivots correspondraient à l'intersection entre la liste de matchs du résultat de la requête et la liste de matchs du corpus à l'origine de l'Index).

c) Par construction à partir d'une liste de matchs

CQP peut construire un sous-corpus a partir :

  • d'un fichier binaire encodant une liste de matchs, avec les commandes (à vérifier) :
    • 'load' (créer le sous-corpus à partir d'uu fichier)
    • 'save' (créer le fichier à partir d'une liste de matchs)
  • d'un fichier texte décrivant une liste de matchs, avec un match par ligne, avec les commandes :
    • 'undump' (créer le sous-corpus à partir d'un fichier)
    • 'dump' (créer le fichier à partir d'une liste de matchs)
  • d'une liste de matchs
    • une requête CQL peut être construite à partir de la liste de matchs
      • voir par exemple la méthode 'positions2cql(matches)' de la classe CQPUtils.groovy
        • elle prend en entrée une représentation textuelle synthétique de la liste de matchs : 0,1,2-3,4-5,6
        • elle produit une requête CQL de sélection correspondante optimisée en longueur : (n1:[])|(n2:[] []{1}) :: (n1 = 0)|(n1 = 1)|(n1 = 6)|(n2 = 2)|(n2 = 4)

Concernant save&load :

Concernant dump&undump :

  • pas de réglage de CQP
  • les sous-corpus sont sauvegardé sous une forme textuelle tabulée (start + tab + end)

Le couple dump&undump est + facile à mettre en place et a utiliser (les fichiers peuvent être manuellement modifiés).

Evolution des classes CQPCorpus et Subcorpus

Les fonction dump&undump ne sont pas des requête nommées :

dump A > "/tmp/dumpA.tbl";
undump B with target keyword < "/tmp/dumpA.tbl";

on peut détecter et reforger avec la bonne syntaxe CQL les syntaxes dump et undump suivantes :

dump "/tmp/dumpA.tbl";
undump "/tmp/dumpA.tbl";

Pour cela, il faut modifier :

  • la méthode Subcorpus._compute()
  • la méthode CQPQuery.query(…)

Remarque :

  • SLH : comprend pas la démarche
    • la notion de sous-corpus TXM semble liée à celle de requête nommée
    • je ne vois pas comment nommer un corpus créé par undump ou load
    • est-ce qu'on ne peut pas lier la notion de sous-corpus TXM à qlqchose de plus riche ? (pas forcément des requêtes nommées)
    • par exemple, au choix :
      • une requête nommée
      • un fichier binaire
      • un fichier texte
      • une liste compacte de matchs (comme celle de la méthode positions2cql(matches)) → une requête nommée

a) Sous-corpus thématique

Un corpus thématique est défini par :

  • son corpus parent, sélectionné dans la vue corpus : le contexte général (omega)
  • un thème, qui correspond à une liste de mots, une requête CQL
  • une limite, qui correspond à une structure du corpus

À la validation, l'interface créé alors une requête CQL composée de 2 parties : THEME + “expand to + STRUCTURE et l'exécute sur le corpus parent sélectionné.

[SLH : discussion] on peut récupérer les mots des textes où se réalisent des mots clés [pour en faire autre chose], ou les identifiants des textes où se réalisent des mots clés [pour en faire autre chose]. Le [pour en faire autre chose] déterminant ce qu'on fait des mots ou des identifiants.

d) Par mise en relation de contraintes

Exemple

La sélection : “je cherche les passages d'une transcriptions où le résumé (de la transcription) contient 'Bardot'” se traduit par les requêtes :

  • les passages d'une transcriptions : ”[] expand to sp“ calculée sur le corpus
  • le résumé contient 'Bardot' : “Bardot” calculée sur le sous-corpus du résumé du corpus

De la sélection, on peut vouloir utiliser :

  • toute la transcription
  • le résumé
  • les passages

Résolution de requête sur structure

 Chapitre "<div> []" VS "[div]" test.xml : *<div> <div2>0 <sub>1 2 3</sub> 4 </div2> </div> <div> <div2>5<sub> 6 7 8 </sub>9 </div2> </div> *0123456789 : corpus *<...><...> : divs (0->4 ; 5 -> 9) *<...><...> : div2s (0->4 ; 5 -> 9) * <.> <.> : subs (0->4 ; 5 -> 9) R1=<div> [] -> 2 matches (0,0) et (5,5) R1bis=<div> [] expand to div-> 2 matches (0,4) et (5,9) R2=[div] -> 10 matches (0,0) ... (5,5) et (9,9) [on perd les limites] R2bis=[div] expand to div-> 2 matches (0,4) et (5,9) * *_123__678_ : sous-corpus construit avec la requete <sub>[]+</sub> R1=<div> [] -> 0 matches R1bis=<div> [] expand to div -> 0 matches R2=[div] -> 6 matches (1,1), (2,2) (3,3), (6,6), (7,7) et (8,8) [on perd les limites des divs et les séquences de mots R="[][]" ne marche pas] R2 + matching strategy=greedy -> 2 matches (1,3) et (6,8) R2bis=[div] expand to div-> 2 matches (0,4) et (5,9)

Interface utilisateur & Modes de création de sous-corpus

  • Simple : l'utilisateur choisi une structure encadrante et une de ses propriété pour sélectionner les structures a inclure dans le sous-corpus
  • Assisté : l'utilisateur choisi une structure encadrante et peut définir un test de sélection à partir de plusieurs des propriétés de la structure.
  • Avancé : l'utilisateur donne la requête CQL à utiliser → l'utilisateur est reponsable du respect de la règle de tomizof
  • Script (mode avancé ?) : [SLH : feature] l'utilisateur sélectionne la macro ou le script construisant le sous-corpus → la macro est reponsable du respect de la règle de tomizof. Les macros construisant des sous-corpus sont stockées dans un répertoire dédié des macros et l'interface de sélection de macro utilise ce lieu de référence pour établir la liste des macros utilisables pour cette action. Ces macros doivent fournir leur liste de matchs par le biais d'une API à définir.
  • Fichier (mode avancé ?) : [SLH : feature] l'utilisateur sélectionne le fichier au format binaire ou au format texte représentant le sous-corpus à construire → le fichier est reponsable du respect de la règle de tomizof. Le corrolaire de cette fonctionnalité est une nouvelle commande d'export de la liste de matchs d'un sous-corpus.
1)
choix d'architecture des données de TXM
2)
au sens des noeuds de la vue Corpus. Un noeud dominé a donc été calculé après son parent - et ses ancêtres - et est contenu dans son parent - et ses ancêtres
3)
voir l'option coalesce des nouvelles commandes TXM
public/specs_subcorpus.txt · Dernière modification : 16/12/2021 16:41 de slh@ens-lyon.fr