Outils pour utilisateurs

Outils du site


public:spec_exploitation_annotation:calculs_syntax_sov

Requêtes et statistiques Syntaxiques

Formulation des calculs par SP

Calculs 1) calculer des statistiques sur les différentes combinaisons de S (ujet), V(erbe) et O(bjet) (les 6 sont possibles en ancien français), en tenant compte :

  • de la nature de S et de O (nom, pronom personnel, …), mais aussi (ce peut être des requêtes successives) :
  • de la détermination ou non du nom (si S et/ou O = nom) : présence ou non d'un article (et si oui, de quel type : défini, indéfini, possessif…)
  • de la complexité de S et de O (longueur en nombre de mots, mais aussi complexité « linguistique »: présence d'une subordonnée relative, d'un complément du nom…)
  • de la complexité du verbe : forme simple ou composée (temps composé, modal + infinitif…)

Calculs 2) comparer la fréquence de OV / VO selon que S est exprimé ou non ; comparer la fréquence de SV / VS selon que O est exprimé ou non.

Deux représentations d'annotations syntaxiques sont disponibles :

  • TIGER-UD issu de CoNLL-U issu de TIGER-RDF
  • TIGER-RDF issu de SRCMF-RDF

Une sous-page décrit l'exploitation de l'annotation TIGER-RDF.

Annotations syntaxiques TIGER-UD

Sélections

On s'intéresse à différents ordres de S, V et O : SVO, SOV, OSV, OVS, VSO, VOS

Reformulation en étiquettes (AL)

#pivot:[pos="VERB"]
& #clause:[cat="root" & type="VFin"]
//& #clause:[cat!=("root"|"Insrt") & type="VFin"]
& #clause >L #pivot
& #clause >D #obj:[cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")] 
& #clause >D #suj:[cat=("nsubj"|"csubj")] 
& #obj    >L #objhead:[] 
& #suj    >L #sujhead:[] 
 
// & #sujhead .* #pivot   & #pivot   .* #objhead //SVO//
// & #sujhead .* #objhead & #objhead .* #pivot //SOV//
// & #objhead .* #sujhead & #sujhead .* #pivot //OSV//
// & #objhead .* #pivot   & #pivot   .* #sujhead //OVS//
// & #pivot   .* #sujhead & #sujhead .* #objhead //VSO//
// & #pivot   .* #objhead & #objhead .* #sujhead //VOS//

Usage : supprimer le commentaire // en début de ligne pour activer la clause définissant l'ordre SVO souhaité.

Fréquences de matchs

  • nb_matchs() SVO, SOV, OSV, OVS, VSO, VOS

Rapports de fréquences de matchs

Calculs 1)

  • détermination ou non du nom (si S et/ou O = nom) :
    • présence ou non d'un article devant (ou derrière)
    • [projection] pos → défini, indéfini, possessif…

Index hiérarchiques de propriétés de noeuds non terminaux

  • étant donné les 6 combinaisons SVO, SOV, OSV, OVS, VSO, VOS :
    • noeuds : indexh(index hiérarchique)) #sujhead.pos
    • noeuds : indexh #objhead.pos
    • noeuds : indexh #sujhead.pos / #objhead.pos
    • mots : indexh #sujhead→T.word
  • étant donné les 6 combinaisons SVO, SOV, OSV, OVS, VSO, VOS :
    • étant donné la pos du S (nom, pronom personnel…)
      • indexh des pos(O)
      • étant donné la pos du O (nom, pronom personnel…)
        • concordance
          • retour à l'arbre syntaxique
  • étant donné la pos du S (nom, pronom personnel…)
    • étant donné la pos du O (nom, pronom personnel…)
      • indexh des SVO, SOV, OSV, OVS, VSO, VOS :

Longueurs en mots

  • de la complexité de S et de O :
    • [projection] longueur en nombre de mots
      • mots : histogramme longueurs #sujhead→T
      • + ventiler longueurs x headpos (valeurs de)
  • cat = « ModA » & hors pos = « det »
    • // complexité « linguistique »: une subordonnée relative, complément du nom… = oui / non
    • → nombre
    • → indexh #sujhead.headpos
    • → indexh #objhead.headpos
  • de la complexité de V :forme simple ou composée (temps composé, modal + infinitif…) = oui / non
    • quand V complexe :
       < aux a :[] ? participe > → cat(a)

Calculs 2)

  • S est exprimé ou non
  • comparer la fréquence de OV / VO
  • comparer la fréquence de SV / VS selon que O est exprimé ou non ;
  • + filtre par interrogatif, exclamatif, etc.
  • + filtre principale, subordonnée
  • + filtre type principale, type subordonnée

Requête de base : calcul de fréquence OV/VO par rapport à l'expression du sujet

#pivot:[pos="VERB"]
& #clause:[cat="root" & type="VFin"]
//& #clause:[cat!=("root"|"Insrt") & type="VFin"]
& #clause >L #pivot
& #clause >D #obj:[cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")] 
& #obj    >L #objhead:[] 
 
// & #pivot   .* #objhead //VO//
// & #objhead .* #pivot //OV//
 
// & #clause >D #suj:[cat=("nsubj"|"csubj")] //Sujet exprimé
// & #clause:[dom!=/.*subj.*/] // Sujet non exprimé

Solutions

Étape 1

La solution V1 est une solution sans intégration forte dans les outils et l'interface de TXM. Elle s'appuie sur des macros Groovy. Elle permet la validation de l'architecture par rapport aux questions initiales.

Réinterprétation des calculs 1)

  • en tenant compte d'une requête TIGER
    • “les différentes combinaisons de S (ujet), V(erbe) et O(bjet)” → requête générique + une des lignes SOV décommentée.
    • “de la nature de S et de O (nom, pronom personnel, …)” → critère de valeur de propriété de #obj, #suj ou #pivot sur le “pos”
    • “de la détermination ou non du nom (si S et/ou O = nom)” → critère de valeur de propriété de #objhead ou #sujhead sur le pos (“contienent/est un 'article'”)
    • par la complexité de S et O → critère longueur de #objhead ou #sujhead → possible en TIGER ? → Est-ce-que cela revient à regarder les #objhead et #sujhead des sous graphes ?
    • “de la complexité de S et de O” → #objhead ou #sujhead contienent/sont une subordonnée “relative, d'un complément du nom…”
    • “de la complexité du verbe” → critère de valeur de propriété de #pivot de la propriété XYZ à la valeur “forme simple ou composée (temps composé, modal + infinitif…)”

Requête générique :

#pivot:[pos="VERB"]
& #clause:[cat="root" & type="VFin"]
//& #clause:[cat!=("root"|"Insrt") & type="VFin"]
& #clause >L #pivot
& #clause >D #obj:[cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")] 
& #clause >D #suj:[cat=("nsubj"|"csubj")] 
& #obj    >L #objhead:[] 
& #suj    >L #sujhead:[] 
 
// & #sujhead .* #pivot   & #pivot   .* #objhead //SVO//
// & #sujhead .* #objhead & #objhead .* #pivot //SOV//
// & #objhead .* #sujhead & #sujhead .* #pivot //OSV//
// & #objhead .* #pivot   & #pivot   .* #sujhead //OVS//
// & #pivot   .* #sujhead & #sujhead .* #objhead //VSO//
// & #pivot   .* #objhead & #objhead .* #sujhead //VOS//

Faire des calculs statistiques pour 1) et 2)

  • voir et vérifier les SOV sélectionnés → Concordance avec mise en évidence ou centrage sur un élément à vérifier
  • compter le nombre de match d'une requête → macro TIGER Summary
  • voir et dénombrer les valeurs que peut prendre tout ou partie du match → macro TIGER Index
  • “(ce peut être des requêtes successives)” → comparer des fréquences de plusieurs requêtes
  • “comparer la fréquence de OV / VO selon que S est exprimé ou non” → comparer les fréquences de 2 requêtes

Macro TIGER Summary

Pour une requête TIGER affiche le nombre de matchs obtenus, sous-graphes inclus ou pas.

Si la sélection est multiple (ex: plusieurs sous-corpus sélectionnés ; une partition sur des textes sélectionnée) alors le résultat est tabulé avec un sous-corpus/partie par colonne.

Le dénombrement ne prend en compte que les matchs TIGER limités aux positions des corpus de la sélection (liste de matchs des sous-corpus/parties) → combinaison requêtes TIGER x requêtes CQL.

Paramètre :

  • R : requête TIGER
	Sous-corpus 1	Sous-corpus 2	Sous-corpus 3
F	F1	F2	F3

Macro TIGER Ratio

Affiche le rapport entre le nombre de matchs de 2 requêtes TIGER, sous-graphes inclus ou pas.

(l'implémentation se fait par l'appel successif de la macro TIGER Summary avec les 2 requêtes)

Paramètres :

  • R1 : requête TIGER 1
  • R2 : requête TIGER 2

La macro travaille sur une sélection multiple de corpus ou à partir d'une partition. Elle produira une colonne par sous-corpus/partie.

	C1	C2	C3
F de R1	F1	F2	F3
F de R2	F1'	F2'	F3'
Ratio	R1	R2	R3

Macro TIGER Index

Affiche un index hiérarchique des valeurs de propriétés de noeuds de matchs TIGER.

Les noeuds sont repérés par un ou plusieurs labels dans la requête TIGER. Les labels peuvent être positionnés sur des noeuds terminaux ou non-terminaux.

L'utilisateur doit alors indiquer les labels de noeuds à utiliser et les propriétés à projeter, pour chaque label.

Paramètres :

  • requête TIGER
  • liste des labels de noeuds à utiliser
  • liste des propriétés à projeter

La macro peut prendre une sélection de sous-corpus ou une partition. Qui génèrera une liste de corpus/sous-corpus : C1, C2, … CN. La macro produira alors une colonne par sous-corpus/partie.

Affichage :

Index h. de [SOV] dans "SRCMF"
P1_P2_P3	F dans C1	F dans C2
V1_V1_V1	N1111		N2111
V1_V1_V2	N1112		N2112
V1_V1_V3	N1113		N2113
...

Étape 2

Complète l'étape 1 avec des macros de synthèse des statistiques dans un tableau unique.

Une étape ultérieure essayera d'aider à naviguer au sein de corpus pour contextualiser certaines fréquences.

Macro TIGERSVOSummary

Autre nom possible TIGER Main Syntactic Categories Order Summary : TIGER MSCOS

La macro se lance sur un corpus ou un sous-corpus. (en cours de rédaction)

Paramètres :

  • queries : chemin vers un tableau ODS contenant les requêtes pour chaque mesure
  • count_sub_matches : oui = compter le nombre de sous-graphes de phrases, non = compter les phrases
  • subject : étiquette sujet
    • exemple : [cat=("nsubj"|"csubj")]
  • object : étiquette objet
    • exemple : [cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")]
  • propositions
    • au moins une des options ci-dessous doit être cochée, sinon erreur du script
    • clauses_count_main (check)
      • requête : [cat="root" & type="VFin"]
    • clauses_count_subordinate (check)
      • requête : [cat!=("root"|"Insrt") & type="VFin"]
    • clauses_count_inserted (check)
      • requête : [cat="Insrt" & type="VFin"]
  • coordinations : Sans / Seulement / Avec

Un warning est affiché si un match contient plusieurs sous-graphes.

Exemple de tableau de requêtes : tableau google

La macro génère un tableau ODS avec les colonnes suivantes :

  • measure, value, qSVO, SVO, qSOV, SOV, qOSV, OSV, qOVS, OVS, qVSO, VSO, qVOS, VOS
    • les colonnes 'q*' contiennent les requêtes TIGER utilisées pour calculer chaque cellule
      • elles sont de largeur fixe

Pour chaque mesure, il contient autant de lignes que de valeurs possibles, et dans chaque des données, le nombre de matchs.

Optimisation possible :

  • limiter la recherche TIGER aux phrases TIGER correspondants aux phrases CQP des sous-corpus CQP
  • présélectionner avec la partie fixe de la requête les graphes SVO, SOV, OSV, OVS, VSO, VOS (sorte de sous-corpus TIGER) puis itérer sur les requêtes
    • MD: ne fonctionne pas dans l'état de l'API TIGER : l'API ne peut pas cibler un seul match à la fois
  • calculer les sélections finales avec l'API TIGER en Groovy/Java sur les matchs de la partie fixe de la requête les graphes SVO, SOV, OSV, OVS, VSO, VOS

Étape 3

La macro TIGERSVOSummary est étendue pour générer un tableau HTML avec liens hypertexte internes par cellule, de recherche TIGER avec visualisation :

  • arbre
  • concordance

Comment gérer la sélection multiple de plusieurs sous-corpus ou partitions ?

  • lister les tableaux dans une feuille
  • créer une feuille par résultat

Recettes

V1

Installer l'extension TIGERSearch

  • Régler le niveau de mise à jour à ALPHA
    1. sélectionner le menu “Édition > Préférences”
    2. aller dans “TXM > Avancé”
    3. sélectionner le niveau de mise à jour “ALPHA”
  • Installer l'extension
    1. sélectionner le menu “Fichier > Ajouter une extension”
    2. sélectionner “TIGERSearch”
    3. valider
    4. valider les étapes d'installation et redémarrer TXM

Charger le corpus SRCMF TXM au format TIGER-UD

  • télécharger le corpus binaire de test XMLTS (srcmf-ud) : https://sharedocs.huma-num.fr/wl/?id=li6GQAftrrb8g0fdL3b4Jb6gxyw6Rz7L
    • le corpus XMLTS est la version du corpus SRCMF publiée sur le site Universal Dependencies
    • il contient des phrases de plusieurs textes (mais pas d'unités textuelles au sens TXM)
    • il contient de nouvelles métadonnées (notamment siècle et genre) (ces métadonnées sont à rétablir dans une version ultérieure)
    • il ne contient pas de ponctuation (les textes CQP ont été produits à partir du TS)
  • dans TXM, charger le corpus depuis le menu Fichier > Charger > un corpus binaire (.txm)

Tester le bon fonctionnement du corpus

  • dans TXM, sélectionner le corpus
  • ouvrir l'interface d'interrogation par requête TIGER (icone tête de tigre)
  • cliquer sur la roue dentée pour ouvrir la zone de paramètres et copier-coller la requête suivante dans le champ requête :
    #pivot:[pos="VERB"]
    & #clause:[cat="root" & type="VFin"]
    //& #clause:[cat!=("root"|"Insrt") & type="VFin"]
    & #clause >L #pivot
    & #clause >D #obj:[cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")] 
    & #clause >D #suj:[cat=("nsubj"|"csubj")] 
    & #obj    >L #objhead:[] 
    & #suj    >L #sujhead:[] 
     
    // & #sujhead .* #pivot   & #pivot   .* #objhead //SVO//
    // & #sujhead .* #objhead & #objhead .* #pivot //SOV//
    // & #objhead .* #sujhead & #sujhead .* #pivot //OSV//
    & #objhead .* #pivot   & #pivot   .* #sujhead //OVS//
    // & #pivot   .* #sujhead & #sujhead .* #objhead //VSO//
    // & #pivot   .* #objhead & #objhead .* #sujhead //VOS//
  • lancer le calcul
  • on doit trouver 494 phrases (ordre OVS)

Tester le bon fonctionnement de la macro TIGER Summary

Remarque : les répertoires “tiger-2019-xx-xx” correspondent aux versions précédentes des macros.
  • ouvrir la vue “Macro”
  • lancer la macro “tiger/exploit/TIGERSummary” avec les paramètres suivants :
    • tiger_query :
      #pivot:[pos="VERB"]
      & #clause:[cat="root" & type="VFin"]
      & #clause >L #pivot
      & #clause >D #obj:[cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")] 
      & #clause >D #suj:[cat=("nsubj"|"csubj")] 
      & #obj    >L #objhead:[] 
      & #suj    >L #sujhead:[] 
      & #objhead .* #pivot   & #pivot   .* #sujhead //OVS//
    • count_subgraph : coché
    • debug : OFF

La console affiche :

	FROSRCMFUD
F	494

Tester le bon fonctionnement de la macro TIGER Ratio

  • lancer la macro “tiger/exploit/TIGERRatio” avec les paramètres :
    • tiger_query_A (requête SVO) :
      #pivot:[pos="VERB"]
      & #clause:[cat="root" & type="VFin"]
      & #clause >L #pivot
      & #clause >D #obj:[cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")] 
      & #clause >D #suj:[cat=("nsubj"|"csubj")] 
      & #obj    >L #objhead:[] 
      & #suj    >L #sujhead:[] 
      & #sujhead .* #pivot   & #pivot   .* #objhead //SVO//
    • tiger_query_B (requête SOV) :
      #pivot:[pos="VERB"]
      & #clause:[cat="root" & type="VFin"]
      & #clause >L #pivot
      & #clause >D #obj:[cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")] 
      & #clause >D #suj:[cat=("nsubj"|"csubj")] 
      & #obj    >L #objhead:[] 
      & #suj    >L #sujhead:[] 
      & #sujhead .* #objhead & #objhead .* #pivot //SOV//
    • count_subgraph : coché
    • debug : OFF

La console affiche :

[FROSRCMFUD:1335]
[FROSRCMFUD:3510]
R = 1335 / 3510 = 0,38
Done.

Tester le bon fonctionnement de la macro TIGER Index

  • sélectionner le sous-corpus du texte “alexis”
  • lancer la macro “tiger/exploit/TIGERIndex” avec les paramètres :
    • tiger_query :
      #pivot:[pos="VERB"]
      & #clause:[cat="root" & type="VFin"]
      & #clause >L #pivot
      & #clause >D #obj:[cat=("obj"|"ccomp"|"obj\:advneg"|"obj\:advmod")] 
      & #clause >D #suj:[cat=("nsubj"|"csubj")] 
      & #obj    >L #objhead:[] 
      & #suj    >L #sujhead:[] 
      & #sujhead .* #pivot   & #pivot   .* #objhead //SVO//
    • labels : objhead
    • properties : pos
    • count_subgraph : coché
    • sort_column = freq
    • max_lines=10
    • debug OFF

La console affiche :

pos	F	FROSRCMFUD
NOUN	839
VERB	310
PRON	74
PROPN	68
ADV	24
ADJ	18
DET	2

V2

Refaire les installations de la recette V1, puis,

Tester le bon fonctionnement de la macro TIGERSVOSummary

  • lancer le calcul
  • ouvrir le résultat
  • copier la requête TS d'une cellule
  • lancer l'outil TIGERSearch
  • coller la requête dans le champ de recherche
  • lancer le calcul et visualiser les résultats
  • vérifier
    • que les résultats correspondent bien à l'objectif de la cellule
    • que le décompte des résultats correspond bien à ce qu'indique la cellule
public/spec_exploitation_annotation/calculs_syntax_sov.txt · Dernière modification: 2019/11/05 13:51 par matthieu.decorde@ens-lyon.fr