Projet encadré 2
BOITES A OUTILS

BAO 2
Annotation en morphosyntaxe avec UDpipe et TreeTagger

Le but de la BAO 2 est d'étiqueter en morphosyntaxe le texte nettoyé dans la BAO 1. On aimerait, pour chaque token du texte, récupérer sa forme, son lemme et sa Part of Speech (POS).  On aimerait également faire afficher les relations de dépendances entre les tokens. 

Pour ça, on va repartir du programme de la BAO 1 et y ajouter des sous-programmes pour la segmentation et l'annotation. 

En entrée, on aura donc encore une fois le nom d'un dossier et le numéro de la rubrique.

Sur tous les fichiers de sortie, certains ne seront pas gardés car ce ne seront que des fichiers "tampon". On gardera donc seulement : 
- le fichier de texte brut avec les titres et descriptions nettoyés qui est le même que dans la BAO1 1,
- un fichier au format CoNLL annoté avec UDpipe et reformaté au format XML,
- un fichier au format TreeTagger reformaté au format XML
par rubrique.

SCRIPTS

LANGAGE INFORMATIQUE MODE D'EMPLOI DU LANCEMENT DU SCRIPT DANS LE TERMINAL TELECHARGEMENT DU SCRIPT ENTIER  COMMENTE
Perl perl bao2-parcours-etiquetage.pl nom_dossier numero_rubrique bao2-parcours-etiquetage.pl
Python python3 bao2-parcours-etiquetage.py nom_dossier numero_rubrique bao2-parcours-etiquetage.py

DEROULEMENT GLOBAL DU SCRIPT EN PYTHON

Le script entier et commenté peut être téléchargé plus haut.

Chaque titre et chaque description est nettoyé puis envoyé dans la fonction analyse_txt(). Cette fonction, qui utilise Spacy_UDpipe, renvoie une ligne par token contenant le lemma, la forme et la POS de chaque token des titres et descriptions séparés par des tabulations. Ce résultat est sauvegardé dans un fichier texte. Ci-dessous se trouve un extrait de ce fichier :

Brexit	Brexit	NOUN
:	:	PUNCT
comment	comment	ADV
l’Europe	l’Europe	PROPN
a	avoir	AUX

Les titres et descriptions nettoyés sont également envoyés dans une autre fonction. Analyse_xml(), qui utilise également Spacy_UDpipe, renvoie la même chose que la fonction précédente mais cette fois-ci formaté au format XML :
- la POS de chaque token se trouve dans la balise <data type="type">
- le lemme dans la balise <data type="lemma">
- et la forme dans <data type="string">

Pour chaque token, les trois informations (POS - lemme - forme) sont mises dans une balise <element>. Chaque titre est ensuite mis dans une balise <titre> et chaque description dans la balise <description>. Le couple titre-description est enfin mis dans des balises <item>...</item>. On sauvegarde ce résultat dans un fichier XML. Le résultat est le même qu'avec le programme Perl.

Pour le programme en Python, nous n'avons donc pas de fichier au format CoNLL reformaté en XML comme dans le programme Perl.

Les fichiers de base sans aucune annotation de la BAO1 ne sont également pas resortis. On obtient directement le fichier TXT avec les tabulations et le fichier XML. 

Pour installer spacy_udpipe, il faut créer un environnement virtuel sur le terminal avec les commandes suivantes :

python3 -m venv env
source env/bin/activate
pip install spacy_udpipe

Le programme en Python faisant moins de choses que le programme en Perl, il ne prend que 6 minutes pour le traitement d'une rubrique.

RESULTATS AVEC PERL

TYPE DE FICHIER RUBRIQUE TELECHARGEMENT DU RESUTLAT
TXT Cinéma corpus-titre-description-3476.txt
XML (annoté avec UDpipe) Cinéma corpus-annotation-ud-3476.udpipe.xml
XML (annoté avec TreeTagger) Cinéma corpus-annotation-tt-3476.xml
TXT Europe corpus-titre-description-3214.txt
XML (annoté avec UDpipe) Europe corpus-annotation-ud-3214.udpipe.xml
XML (annoté avec TreeTagger) Europe corpus-annotation-tt-3214.xml
TXT Livres CORPUS-TITRE-DESCRIPTION-3260.TXT
XML (annoté avec UDpipe) Livres
CORPUS-ANNOTATION-UD-3260.UDPIPE.XML
XML (annoté avec TreeTagger) Livres CORPUS-ANNOTATION-TT-3260.XML