Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Essai avec perl

19 Novembre 2012 , Rédigé par Amélie BOSC

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) :

Publicité

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&ordm URL</td><td bgcolor=\"#A9A9A9\">n&ordm 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&ordm", $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);

Publicité

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!

Publicité
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
S
Pensez à aller voir cette page : http://www.tal.univ-paris3.fr/cours/PROJET-MOT-SUR-LE-WEB/script-perl_get_dump_nettoyage.html (accessible à partir de la page du cours http://www.tal.univ-paris3.fr/cours/PROJET-MOT-SUR-LE-WEB/)
Répondre
A
Merci. Je vais pouvoir avancer cette partie pour la semaine prochaine.<br /> <br /> Et je viens de trouver la solution du problème sur le message d'erreur : c'était une erreur dans la déclaration du fichier français_perl.txt dans le fichier d'input.