Sample image

Boîte à Outils 1

Le but de cette série est de parcourir une arborescence de fils RSS et d'extraire des contenus textuels. L'extraction des informations des fichiers XML du dossier de corpus 2013 se fait à l’aide d'un script en Perl. Pour accéder au contenu des nœuds de XML, nous utilisons le module XML::RSS. A la fin du traitement, les noms de fichiers ont la forme suivante: 2008-sortie-regex.txt et 2008-sortie-regex.xml. Les fichiers de sortie sont encodés en UTF-8.

Script d'extraction à l'aide des expressions régulières

Premièrement, nous avons traité le script qui extrait les textes entre les balises <title> </title> et <description> </description> en utilisant des expressions régulières. C'est un script assez basique : à partir du répertoire de départ passé en $ARGV[0], il parcours tous les sous-répertoires en recherche des fichiers avec l'extension XML.
Dans ce script ainsi que dans le reste des programmes, nous avons importé le module Unicode::String qw(utf8) qui permet au programme de traiter les caractères UNICODE dans le format UTF-8.

use Unicode::String qw(utf8);

La partie générale du programme s'occupe de la lecture du nom du dossier passé en argument 0 ($racine) aussi que la définition de l'encodage pour les fichiers de sortie (UTF-8). Les deux fichiers de sortie au format TXT (OUT1) et XML (OUT2) sont ouvert pour l'écriture du contenu textuel extrait à l'aide de la procédure &recursive($racine).

La procédure &recursive consiste en plusieurs étapes : la recherche des fichiers XML et de leur encodage, la détection des balises nécessaires, l'extraction du texte entre ces balises et son écriture dans les fichiers de sortie TXT et XML.
Si le fichier courant est . ou .. ou .txt, le programme l'ignore. Si le fichier est un répertoire, la procédure fait appelle à elle même afin de poursuivre le parcours arborescent. Si le fichier est un vrai fichier, le programme passe au traitement de l'encodage.

L'encodage est détecté à l'aide de l'option -i, --mime. Elle assure que la commande produit en sortie "mime type strings". C'est-à-dire, elle produit 'text/plain; charset=us-ascii' plutôt que 'ASCII text'. L'option cut -d découpe l'encodage de la deuxième colonne. L'exemple de l'utilisation de l'option est le suivant :
ulianap@CEL-4GXUW5DNC7:/media/KINGSTON/PARIS3/BAO3$ file -i SORTIE-extract-txt-ALAUNE-iso.cnr
SORTIE-extract-txt-ALAUNE-iso.cnr: text/x-c++; charset=iso-8859-1

En résultat, le fichier XML est ouvert à l'encodage qui lui est attribué.

Ensuite, le programme passe à l'étape de repérage du contenu entre les balises concernées. Chaque ligne du fichier XML est traitée dans la boucle while, le retour à la ligne et enlevé et la ligne est concaténée dans une variable $texte. La fonctionnalité de substitution efface les espaces entre les balises XML. Le texte entre les balises <pubDate> et </pubDate> est repéré pour stocker la date du fichier dans une nouvelle variable $date en utilisant la variable spéciale $1. Cette variable récupère le texte correspondant à l'expression régulière ([^<]+).

Le programme convertit aussi le texte repéré dans l'encodage de sortie si l'encodage initial ne lui correspond pas. Les variables $1 et $2 stockent les chaines de caractères correspondant aux motifs, i.e. le contenu des balises <title> et <description>. Les parties extraites sont ensuite écrites dans les fichiers de sortie.

Finalement, la procédure nettoietexte effectue la substitution et à la suppression des symboles inutiles.

Télécharger

Script d'extraction à l'aide des expressions régulières

Nous avons optimisé ce script à partir du script précédent en important le module XML::RSS. A notre avis, l'utilisation de ce module allège la lisibilité du code et simplifie le repérage du contenu entre les balises. Ce script prend en argument le nom de la rubrique et produit un fichier de sortie portant le nom de la rubrique et contenant tous les textes correspondant aux fichiers de la même rubrique.
Un objet RSS est instancié. L'instruction eval {$rss->parsefile($fic) vérifie bien si le fichier $fic est un fichier RSS.

Le programme cherche dans l'objet $rss la clé $channel qui donne l'accès à la clé $pubdate. Le titre et le résumé sont récupérés de même façon.

Pour éviter des doublons, nous avons défini deux dictionnaires qui contrôlent la répétition des parties extraites de chaque fichier parcouru.

La procédure selectRub cherche le nombre identifiant du fichier par rapport au nom de la rubrique passé en argument par l'utilisateur.

Télécharger

Remarques

Nous avons travaillé sous les deux environnement : le Debian et le Windows. Sous le Windows,le caractère é s’affiche à la place du caractère é seulement dans le fichier TXT. Nous avons essayé de transcoder le fichier de sortie TXT en ISO-8859-15 afin de voir si cela changerai l’affichage du caractère. Cela a aggravé l’affichage des caractères accentués. Il fat aussi remarquer que le même caractère s'affiche correctement dans le fichier de sortie XML et dans tous les fichiers sous le Debian. Ainsi, nous supposons que la solution optimal pour le parcours arborescent est d'utiliser le module XML::RSS qui est beaucoup plus claire par rapport aux suites des expressions régulières. De plus, nous avons rajouté l'option de filtrage par rubrique qui a rendu les fichiers de sortie plus ordonnés pour l'utilisateur et qui seront utiles dans les séries des BAOs qui suivent.