(: on s'intéresse aux relations de dépendances de type NSUBJ si vous souhaitez extraire un autre type de relation, modifiez la ligne 15 de ce code selon la relation, on voudra aussi modifier l'ordre d'affichage (Dep Gouv ou Gouv Dep) ligne 34 :) (: dans le fichier de sortie UDPipe reformaté en XML : chaque phrase est dans une balise

chaque token est dans une balise une balise contient 10 balises la 1ere balise contient l'identifiant du token la 2eme balise contient la forme du token (son texte) la 7eme balise contient l'identifiant de son gouverneur la 8eme balise correspond à la relation de dépendance avec son gouverneur :) (: pour chaque item dont la 8e balise contient la chaîne de caractères 'nsubj' :) for $item in collection("BAO2_sortieUDpipe_3246.txt.xml")//item where contains($item/a[8]/text(),'nsubj') (: on récupère dans la variable $formeDep la forme du dépendant dans la variable $positionDep l'identifiant du dépendant dans la variable $positionGouv l'identifiant du gouverneur :) let $formeDep:=$item/a[2]/text() let $positionDep:=$item/a[1]/text() let $positionGouv:=$item/a[7]/text() (: on récupère dans la variable $formeGouv la forme du gouverneur, en fonction de la position du gouverneur par rapport au dépendant (avant ou après) attention il faut convertir le contenu textuel des positions en valeur numérique :) let $formeGouv:= if ( number($positionGouv) < number($positionDep) ) then ( $item/preceding-sibling::item[number(a[1])=number($positionGouv)]/a[2]/text() ) else ( $item/following-sibling::item[number(a[1])=number($positionGouv)]/a[2]/text() ) (: on concatène la forme du gouverneur + un espace + la forme du dépendant et on stocke la liste de toutes les séquences dans la variable $res :) let $res:= string-join(($formeDep,$formeGouv)," ") (: on regroupe les séquences :) group by $grp:=$res (: on compte le nombre d'occurrences de chaque séquence et on les trie par ordre décroissant :) order by count($res) descending (: on concatène la séquence + une tabulation + le nombre d'occurrences et on affiche le tout :) return string-join(($grp,count($res))," ")