rah!

rah!

rah!

>>>Principe de la BaO#2

A partir des sorties .xml de la BaO#1, produire en sortie de Bao#2 des fichiers étiquetés.


>>>BaO#2_RegEx/RSS_XML, même combat!

Cette BaO va aller assez vite. Nous avions effectué un grand nombre de traitements préliminaires sur la BaO#1, ce qui nous a permis d'adapter cette nouvelle BaO sans trop de difficultés.

Petit rappel des traitements de la BaO#1:
  • choix des rubriques
  • extraction d'un fichier .txt encodé en ISO-8859-1
  • extraction d'un fichier .xml encodé en UTF-8
Notre objectif est maintenant, d'appliquer TreeTagger sur les sorties .xml que nous avons obtenues précédemment.

TreeTagger est un outil librement accessible, développé par l'université de Stuttgart, disponible à cette adresse: TreeTagger

Rapidement, nous avons pensé intégrer à la BaO#1 une simple fonction system pour invoquer TreeTagger. Vous pouvez voir les différentes lignes ci-dessous:

sub treeTagger {
	system("perl ../TreeTagger/cmd/utf8-tokenize.pl -f $outputTMP | ../TreeTagger/bin/tree-tagger ../TreeTagger/french-utf8.par -lemma -token -no-unknown -sgml > SORTIE_RSS_TreeTagger_BAL_$pathRubName.txt");
	system("perl ../TreeTagger/cmd/treetagger2xml-utf8.pl SORTIE_RSS_TreeTagger_BAL_$pathRubName.txt utf-8");
	system("mv SORTIE_RSS_TreeTagger_BAL_$pathRubName.txt.xml SORTIE_RSS_TreeTagger_BAL_$pathRubName.xml");
	system("rm SORTIE_RSS_TreeTagger_BAL_$pathRubName.txt");
	system("rm SORTIE_RSS_TreeTagger_$pathRubName.txt");
	}

Encore une fois, coder à l'aide de fonctions se révèle pratique et économique. Il nous a suffit de copier/coller ce morceau de code d'une BaO à l'autre pour les adapter à TreeTagger.

Trop facile me direz-vous? Vous avez raison. Si vous observez attentivement les lignes de codes, vous constaterez que nous appliquons TreeTagger sur une variable nommée $outputTMP.

En effet, TreeTagger doit prendre en entrée un fichier .txt. Il ne peut appliquer ses traitements directement sur une variable contenant le résultat d'une concaténation, elle-même contenue dans la mémoire de votre machine. Il faut donc passer par un fichier .txt temporaire dans lequel on va extraire le contenu que l'on veut étiqueter.

Les lignes mv et rm sont destinées à renommer la sortie obtenue et supprimer les fichiers crées temporairement.

Ci-dessous, déclaration de la variable $outputTMP, identique dans les deux versions de la BaO#2.

my $outputTMP="SORTIE_RSS_TreeTagger_$pathRubName.txt";
open (TMP,">:encoding($encSortieXML)","SORTIE_RSS_TreeTagger_$pathRubName.txt");

Notez la variable $pathRubName qui permet de créer des fichiers différents en fonction de la rubrique choisie. Si vous n'ajoutez pas ce genre d'artifices dans les noms de vos fichiers de sortie, à chaque fois que vous relancez votre programme, le fichier précédant sera écrasé.
Ci-dessous, la variable contenant le texte dumpé qui va être redirigée vers le fichier .txt temporaire destiné à TreeTagger.

Notez que ce qui sera dumpé est sous la forme d'une arborescence .xml mais dans un fichier .txt. C'est cette petite astuce qui permettra, finalement d'obtenir le fichier .xml souhaité.

$DUMPTMP.="<article>\n<date>$date</date>\n<title>$titre</title>\n<abstract>$desc</abstract>\n</article>\n";

Le fichier obtenu va d'abord passer par la moulinette de utf8-tokenize.pl, afin de le... tokeniser, puis ce fichier sera envoyé à TreeTagger en prenant en argument d'entrée french-utf8.par, un fichier permettant l'étiquetage en langue française de fichiers .txt précédemment tokenisés.

A l'issue de ces traitements successifs, le fichier .txt obtenu (contenant le texte étiqueté) va passer par une dernière moulinette, treetagger2xml-utf8.pl afin de reconvertir le .txt en .xml. OUF!

A ce titre, le fichier treetagger2xml-utf8.pl a été légèrement modifié de manière à pouvoir appliquer une feuille de style .xsl directement au fichier .xml obtenu.

Vous pouvez voir le résultat ci-dessous (cliquez sur l'image pour afficher le fichier dans le navigateur):
Pour les téléchargements, cliquez sur la disquette à gauche.

Le saviez-vous?
Sony a stoppé sa production de disquette au format 3,5" en 2011.