BAO 3

Extraction des patrons syntaxiques

La BO3 permet d'extraire des patrons syntaxiques à partir des fichiers étiquetés à l'aide de Talismane et ceux étiquetés via treetagger. L'intérêt de cet exercice est d'observer les terminologies qui se dégagent en fonction des rubriques traitées. En effet on pourra voir si certains patrons sont particuliers à une rubrique, dans laquelle ils reviendraient fréquemment. On a donc 4 patrons syntaxiques qui sont:

  • NOM PREP NOM PREP
  • VERBE DET NOM
  • NOM ADJ
  • ADJ NOM

Dans le cadre de la BAO 3, il nous a été demandé de réaliser la tâche demandée de trois manières différentes. L'extraction des patrons sera donc réalisée à l'aide d'un script perl pour les fichiers étiquetés via Talismane, mais aussi à l'aide de feuilles de style ainsi qu'en utilisant une requête Xquery pour les fichiers treetagger et Talismane (convertis au format XML dans le cas des seconds).

Script Perl

Ce programme permet donc de récupérer les patrons syntaxiques recherchés dans les fichiers étiquetés par Talismane. La ligne de commande doit être lancée avec pour premier argument du programme le fichier texte talismane et en second argument un simple fichier texte contenant les quatre patrons syntaxiques que l'on souhaite extraire.

Ci-dessous, le script perl rédigé par Serge Fleury et récupéré sur la page icampus. Il était aussi possible d'utiliser un autre script, rédigé par M.Daube, cependant le script de M.Fleury permettant de récupérer tous les patrons à la fois, c'est ce dernier qui a été retenu.


XSLT

Dans cette partie, nous utilisons des feuilles de style XSLT pour extraire les patrons syntaxiques depuis les fichiers Talismane et treetagger. Pour cela, il est nécessaire que les fichiers à exploiter soient au format XML, ce qui est le cas des fichiers étiquetés par treetagger mais pas de ceux étiquetés par Talismane. Il convient donc de convertier les fichiers txt Talismane au format xml, ce qui est réalisé à l'aide d'un script disponible sur icampus.

Vous trouverez ci-dessous les feuilles de style et les fichiers de sortie contenant les patrons extraits.

Treetagger

Patron 1

Patron 2

Patron 3

Patron 4

Talismane

Dans cette partie on réalise également l'extraction de patrons mais à partie des fichiers Talismane. Ces derniers ont d'abord été convertis au format XML.

Patron 1

Patron 2

Patron 3

Patron 4


Xquery

Pour finir, nous allons extraire les patrons morpho-syntaxiques des fichiers Talismane et Treetagger, en utilisant des requêtes Xquery. Nous rentrons donc nos requêtes dans le logiciel BaseX, qui permet d'appliquer la requête à un fichier xml et d'obtenir un fichier de sortie. Les requêtes pour chaque rubrique sont les mêmes, seul le chemin est à chaque fois à modifier. Vous trouverez ci-dessous les résultats pour chaque patron et chaque rubrique accompagnés de la requête.

Treetagger

Patron 1

La requête :


for $item in collection("../../../Bao2/résultats-BAO2/rubrique_3232/sortiexml-slurp_3232.xml")//item
for $elt in $item//element
let $nextElt := $elt/following-sibling::element[1]
let $nextnextElt := $elt/following-sibling::element[2]
let $nextnextnextElt := $elt/following-sibling::element[3]
where $elt/data[1] = "NOM" and contains($nextElt/data[1], "PRP") and $nextnextElt/data[1] = "NOM" and contains ($nextnextnextElt/data[1], "PRP")
return string-join(($elt/data[3],$nextElt/data[3],$nextnextElt/data[3], $nextnextnextElt/data[3])," ")
					   

Patron 2

La requête :


for $item in collection("../../../Bao2/résultats-BAO2/rubrique_3232/sortiexml-slurp_3232.xml")//item
for $elt in $item//element
let $nextElt := $elt/following-sibling::element[1]
let $nextnextElt := $elt/following-sibling::element[2]
where contains($elt/data[1],"VER") and contains($nextElt/data[1], "DET") and $nextnextElt/data[1] = "NOM"
return string-join(($elt/data[3],$nextElt/data[3],$nextnextElt/data[3])," ")
					   

Patron 3

La requête :


for $item in collection("../../../Bao2/résultats-BAO2/rubrique_3232/sortiexml-slurp_3232.xml")//item
for $elt in $item//element
let $nextElt := $elt/following-sibling::element[1]
where $elt/data[1] = "NOM" and $nextElt/data[1] = "ADJ"
return string-join(($elt/data[3],$nextElt/data[3])," ")
					   

Patron 4

La requête :


for $item in collection("../../../Bao2/résultats-BAO2/rubrique_3232/sortiexml-slurp_3232.xml")//item
for $elt in $item//element
let $nextElt := $elt/following-sibling::element[1]
where $elt/data[1] = "ADJ" and $nextElt/data[1] = "NOM"
return string-join(($elt/data[3],$nextElt/data[3])," ")
					   

Talismane

Patron 1

La requête :


for $art in collection("../../../Bao2/résultats-BAO2/rubrique_3232/sortietalismane-slurp_3232.txt.xml")//p
for $elt in $art/item
let $nextElt := $elt/following-sibling::item[1]
let $nextnextElt := $elt/following-sibling::item[2]
let $nextnextnextElt := $elt/following-sibling::item[3]
where $elt/a[4] = "NC" and $nextElt/a[4] = "P" and $nextnextElt/a[4] ="NC" and $nextnextnextElt/a[4] = "P"
let $nom:=string-join($elt/a[3]/text())
let $prep:=string-join($nextElt/a[3]/text())
let $nom2:=string-join($nextnextElt/a[3]/text())
let $prep2:=string-join($nextnextnextElt/a[3]/text())
return (concat($nom," ",$prep," ",$nom2, " ",$prep2))
					   

Patron 2

La requête :


for $art in collection("../../../Bao2/résultats-BAO2/rubrique_3232/sortietalismane-slurp_3232.txt.xml")//p
for $elt in $art/item
let $nextElt := $elt/following-sibling::item[1]
let $nextnextElt := $elt/following-sibling::item[2]
where $elt/a[4] = "V" and $nextElt/a[4] = "DET" and $nextnextElt/a[4] ="NC"
let $Verbe:=string-join($elt/a[3]/text())
let $Det:=string-join($nextElt/a[3]/text())
let $Nom:=string-join($nextnextElt/a[3]/text())
return (concat($Verbe," ",$Det," ",$Nom))
					   

Patron 3

La requête :


for $art in collection("../../../Bao2/résultats-BAO2/rubrique_3232/sortietalismane-slurp_3232.txt.xml")//p
for $elt in $art/item
let $nextElt := $elt/following-sibling::item[1]
where $elt/a[4] = "NC" and $nextElt/a[4] = "ADJ"
return string-join(($elt/a[2],$nextElt/a[2])," ")
					   

Patron 4

La requête :


for $art in collection("../../../Bao2/résultats-BAO2/rubrique_3232/sortietalismane-slurp_3232.txt.xml")//p
for $elt in $art/item
let $nextElt := $elt/following-sibling::item[1]
where $elt/a[4] = "ADJ" and $nextElt/a[4] = "NC"
return string-join(($elt/a[2],$nextElt/a[2])," ")
					   


Commentaires

En observant les différents fichiers de sortie, on peut remarquer que les extractions ne sont pas les mêmes, ce qui s'explique par le fait que les deux étiqueteurs produisent deux analyses différentes. En effet les étiquetages diffèrent pour certains mots. On peut tout de même noter que des erreurs d'étiquetage apparaissent notamment pour ce qui est des articles qui sont souvent étiquetés comme adjectif ce qui fausse le rendu dans le cas des patrons ADJ NOM et NOM ADJ. Cependant en ce qui concerne la représentation des rubriques et leur sujet, ces deux patrons restent les plus représentatifs. En effet pour la rubrique International on va retrouver des patrons comme "élections majeures", "Autorités palestiniennes" ou encore "présidentielle américaine", dans le cas de la rubrique Société, le résultat "gilet jaune" apparaît et pour la rubrique Idéés on l'obtient par exemple le patron "pop culture". Quant à la rapidité des différentes méthodes, Xquery reste la plus efficace, le programme perl et les feuilles XSLT donnant des résultats au bout de quelques secondes, parfois plus longtemps dans le cas d'un fichier très lourd en ce qui concerne les feuilles de style. J'ai pu remarquer qu'à cause de la taille des fichiers, il était impossible d'utiliser les feuilles de style dans la machine virtuelle, en effet lors du lancement de la commande "xsltproc nomfichierxsl nomfichierxml > fichiersortie", cette dernière plantait et le terminal affichait le message "processus arrêté" au bout de quelques secondes. Je me suis donc servie du shell bash sous Windows pour pallier ce problème. Les résultats obtenus avec la BAO3 devaient servir à l'élaboration d'un système de classification dans la BAO4, cependant comme il a été précisé précedemment, nous avons du nous en tenir à la BAO3.