La boite à outil 1 a pour but d’extraire les titres et les descriptions qui sont contenus dans les fichiers XML de l’arborescence, un premier script nous à été fourni sur lequel nous avons effectué quelques changements pour récupérer le bon fichier de sortie.

L’idée c’est de parcourir l’arborescence, repérer les noms des rubriques, nettoyer les données pour qu’enfin les stocker dans le fichier de sortie, en utilisant un ensemble de fonctions qui s’enchainent comme suit.

Fonction parcourRep

La fonction prend en argument le répertoire et tous les sous-répertoires un par un et parcoure les fichiers qui s’y trouvent un par un et sélectionne chaque fichier dont le nom se termine par .XML, il faut aussi éliminer les fichiers qui commencent par « fil » qui sont des fichiers que nous n’allons pas traiter dans ce projet.

Si le nom du fichier est conforme à la première condition il nous faut détecter l’encodage, une fois l’encodage récupéré on passe à la détection des rubriques.

Le tag qui contient les rubriques est "title" il est entouré de la balise "channel" et des fois cette dernière est suivis de "atom" qui contient des métadonnées, une simple expression régulière à été utilisée pour récupérer que le bout de donné voulus.

# Parcourir l'arborescence et verifier l'encodage
&parcourRep($rep);

foreach my $rub (@listeRubriques) { my $output1=$sortie.$rub.".xml"; if (!open (OUTXML,">>:encoding(utf-8)", $output1)) { die "Le repertoire existe deja $output1"}; print OUTXML "</EXTRACTION>\n"; close(OUTXML); } exit;

La prochaine étape sera de détecter les titres et les descriptions, la création de variable est nécessaire dans cette étape pour stocker les éléments détectés en vue de les inscrire dans le fichier de sortie, et pour assurer le bon format d’écriture du fichier de sortie et notamment son encodage nous allons utiliser des modules Perl chargés au tout début du script.

Unicode::String qw(utf8)

pour permettre l’encodage des chaines de caractères en UTF-8 et

HTML::Entities

pour les convertir en entités HTML.

#!/usr/bin/perl
use strict;
use Unicode::String qw(utf8);
use HTML::Entities;

Fonction clean

Est une fonction qui devra enlever toutes les balises qui restent collées aux titres et aux descriptions.

Il faut aussi éviter les doublons des titres et des descriptions en utilisant une table de hachage à laquelle on ajoute l’élément s’il n’y est pas déjà et ça sera la condition pour y être inscrit aussi sur le fichier de sortie.

sub clean {
    my $texte=shift;
    $texte=~s/<img[^>]+>//g;
    $texte=~s/<a href[^>]+>//g;
    $texte=~s/<\/a>//g;
    $texte=~s/<[^>]+>//g;
    $texte=~s/&/et/g;
    $texte=~s/\x{201c}/“/g;
    $texte=~s/\x{201d}/”/g;
    $texte=~s/\x{2019}/'/g;
    $texte=~s/\x{2018}/‘/g;
    $texte=~s/\x{2013}/-/g;
    $texte=~s/\x{2192}/→/g;
    $texte=~s/\x{2026}/.../g;
    $texte=~s/\x{0153}/œ/g; 
    $texte=~s/\x{0152}/Œ/g;
    $texte=~s/\x{fffd}/�/g; 
    $texte=~s/\x{20ac}/€/g;
    $texte=~s/\x{2009}/ /g; 
    return $texte;
}

Fonction repRubriques

Une fonction qui fait pratiquement le même travail que la précédente mais cette fois-ci avec les rubriques qui eux vont constituer les noms des fichiers de sortie.

# parcourir la liste des rubriques et creer les fichiers
&repRubriques($rep);   

my @listeRubriques = keys(%dicoRUB); foreach my $rub (@listeRubriques) { my $output1 = $sortie.$rub.".xml"; my $output2 = $sortie.$rub.".txt"; if (!open (OUTXML,">:encoding(utf-8)", $output1)) { die "Le repertoire existe deja $output1"}; if (!open (OUTTXT,">:encoding(iso-8859-1)", $output2)) { die "Le repertoire existe deja $output2"}; print OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"; print OUTXML "<EXTRACTION>\n"; close(OUTXML); close(OUTTXT); }

Le script de la première boite à outils est a télécharger ici

Lien vers le projet

Université Paris X

Site PLURITAL