Essai avec perl
J'ai voulu essayer de refaire un script perl obtenant les mêmes résultats que celui réalisé avec bash jusqu'à présent. J'ai voulu aussi ajouter des sections à notre tableau, pour distinguer les quatres sous-corpus que comportent nos fichiers d'URLS : conditions d'utilisation, extraits de loi, tutoriels, articles de presse.
Pour l'instant, je n'ai qu'un seul tableau à trois colones : la première est le numéro de l'URL, la deuxième le numéro de l'URL au sein du sous-corpus, et la troisième est le lien vers la page.
La première étape lors de la réalisation de ce script a été de modifier nos fichiers d'input et de les baliser pour distinguer les quatre sous-corpus. J'ai mis les annotations entre chevrons.
Voici le fichier de l'allemand comme exemple (À noter que nous avons collecté de nouvelles urls pour compenser les pages qui ne s'étaient pas laissées aspirer la semaine dernière) :
fichier d'input pour le programme en perl, concernant la langue allemande
Voici le programme perl :
use locale;
use strict;
# Indication des fichiers d'input et d'output :
open (IN, "<", "./URLS/input.txt") or die "Impossible d'ouvrir le fichier d'input.\n\n";
open (OUT, ">", "./TABLEAUX/tableau1perl.html") or die "impossible de créer le fichier d'output.\n\n";
# Déclaration des variables :
my $nomdefichier;
my $url;
my $numurl;
my $numsouscorpus;
# Mise en place de l'en-tête de la page html :
print OUT "<html>\n\n<head>\n<meta http-equiv=\"Content-Type\" content=\"texte/html;charset=ISO-8859-1\"></head><body><center>";
while ($nomdefichier=<IN>){
chomp $nomdefichier;
open (INBIS, "<", "./URLS/$nomdefichier") or die "Impossible d'ouvrir le fichier d'input bis.\n\n";
# Création de l'en-tête du tableau.
print OUT "<table border=\"2\">\n<th bgcolor=\"grey\" colspan=\"3\">Liste URL $nomdefichier </th>";
# Début de la boucle 1, traitement du contenu du fichier ligne par ligne :
$numurl = 1;
while ($url = <INBIS>){
chomp $url;
# Distinction entre les urls et les balises de sous-corpus :
if ($url=~/<([^>]+)>/){
print OUT "<tr><td bgcolor=\"#A9A9A9\" colspan=\"3\"><center>",$1,"</center></td></tr>";
print OUT "<tr><td bgcolor=\"#A9A9A9\">nº URL</td><td bgcolor=\"#A9A9A9\">nº URL dans le sous-corpus</td><td bgcolor=\"#A9A9A9\">URL</td></tr>";
$numsouscorpus = 1;
}
else {
print OUT "<tr><td><font color=\"red\"> <center> ", $numurl, " </center> </font></td> <td> <font color=\"red\"> <center> ", $numsouscorpus , " </center> </font></td><td><a href=\"", $url , "\" target=\"_blank\">URL nº", $numurl , "</a></td></tr>";
$numurl = $numurl + 1;
$numsouscorpus = $numsouscorpus+1;
}
}
# Fermeture du tableau :
print OUT "</table><br><br>";
}
# Fin de la page html :
print OUT "</center></body></html>";
close (IN);
close (INBIS);
close (OUT);
Et le tableau de résultats :
Rédiger le programme pour qu'il génère le tableau pour un fichier n'a pas posé de problèmes, en revanche, j'ai eu des difficultés à l'adapter pour qu'il traite tous les fichiers du répertoire pour faire un tableau par langue sur une meme page, comme on l'a fait en bash. Avant de trouver cette solution qui consiste à lister les fichiers dans un premier fichier d'input sur le blog des Bernardins, j'ai essayé avec @ARGV ainsi qu'avec la commande readdir. J'avais même envisagé de rassembler le contenu de tous mes fichiers dans un seul et meme fichier et de revoir le système de balisage.
Une chose me surprend encore cependant, quand je lance le programme, j'obtiens un message d'erreur selon lequel le fichier d'input bis (celui correspondant à chaque fichier de liste d'URLS) n'aurait pas pu etre ouvert. Ce message n'apparait qu'une fois, j'imagine que cela correspond à la sortie de la boucle :
while ($nomdefichier=<IN>){
chomp $nomdefichier;
open (INBIS, "<", "./URLS/$nomdefichier") or die "Impossible d'ouvrir le fichier d'input bis.\n\n";
Je me demande s'il est possible de ne pas obtenir ce message d'erreur.
Je n'ai pas eu le temps de voir comment aspirer les pages ou les dumper.
Retour à bash dès demain!