#/usr/bin/perl <du fichierdu filtrage DOC #---------------------------------------- my $rep="$ARGV[0]"; # $rep = repertoire-a-parcourir my $rubrique= "$ARGV[1]"; # rubrique a traiter my %dico; #pour eviter des doublons # on s'assure que le nom du répertoire ne se termine pas par un "/" $rep=~ s/[\/]$//; #---------------------------------------- initialisation flux de sortie # sortie txt my $output0="$rubrique-profondeur.txt"; if (!open (FILEOUT,">$output0")) { die "Pb a l'ouverture du fichier $output0"}; close(FILEOUT); # sortie xml my $output1="$rubrique-profondeur.xml"; if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"}; #---------------------------------------- début fichier xml print FILEOUT "\n"; print FILEOUT "\n"; print FILEOUT "Manying Zhang\n"; close (FILEOUT); #---------------------------------------- # Lancement procédure de récursion &parcoursarborescence($rep); #---------------------------------------- fin fichier xml open (FILEOUT,">>:encoding(utf-8)", $output1); print FILEOUT "\n"; close(FILEOUT); exit; #----------------------------------------------------------------------------------------------- # SOUS-PROGRAMME sub parcoursarborescence { my $dossier = shift(@_); #on recupere les arguments passes en procedure opendir(DOSSIER, $dossier) or die "can't open $dossier: $!\n"; # erreur si c'est un fichier au lieu d'un dossier my @files = readdir(DOSSIER); # liste des fichiers contenus dans le dossier closedir(DOSSIER); # pour chaque élément de la liste de fichiers foreach my $file (@files) { next if $file =~ /^\.\.?$/; # passer au suivant s'il y a des éléments cachés next if $file =~ /^fil/; $file = $dossier."/".$file; # on reconstruit le chemin absolu if (-d $file) { # -d permet de savoir si l'objet est un répertoire (directory) print " ==> ",$file,"\n"; &parcoursarborescence($file); #Recursion print " ==> ",$file,"\n"; } if (-f $file) { # -f permet de savoir si l'objet est un fichier # TRAITEMENT à realiser sur chaque fichier # Si c'est txt, c'est la PROFONDEUR if ($file =~/$rubrique.+\.txt$/) { print "<",$i++,"> ==> ",$file,"\n"; # affichage pour vérifier en ligne de commande qu'on traite bien les bons fichiers $codage = "utf-8"; open (FIC, "<:encoding($codage)", $file); # ouverture fichier à traiter open (OUT, ">>:encoding($codage)", $output0); # ouverture fichier sortie txt open (OUT2, ">>:encoding($codage)", $output1); # ouverture fichier sortie xml print OUT2 "\n$file\n"; #ramener tout le flux textuel de FIC sur une seule ligne my $texte=""; while (my $ligne = ) { # lecture du fichier ligne par ligne # NETTOYAGE chomp $ligne; next if $ligne=~ s/\r//g; next if $ligne=~ /^]*>/; next if $ligne=~ /^Le Monde/; next if $ligne=~ /.+Mis.+jour le/; next if $ligne=~ /^(Le)?[0-3][0-9]\.[01][0-9]\.201[56] . [012][0-9]h[0-5][0-9]/; $ligne=~ s/\xA4//g; # caractère currency next if $ligne=~ /.*\|.*/; next if $ligne=~ /^\s*$/; $ligne=~ s/\s{3,30}//g; next if $ligne=~ /^Suivre( ce journaliste sur [Tt]witter)?/; next if $ligne=~ /^Aller sur la page de ce journaliste/; next if $ligne=~ /^Journaliste au Monde/; next if $ligne=~ /^Cr.dits :.*(AFP|REUTERS)/; next if $ligne=~ /^Lire (\(?.dition abonn.e?\)?|le diaporama|d.crytage|l.analyse)/; next if $ligne=~ /^(Mettre en pause|Rejouer|›?Acc.dez au portfolio)/; next if $ligne=~/^Lire aussi .*:/; next if $ligne=~/=\"http:\/\//; next if $ligne=~ /^Image (pr.c.dente|suivante)/; next if $ligne=~ /^(width=|src=|alt=)/; next if $ligne=~/^(require|var i|portfolio|tabindex=|itemprop=|datetime=)/; next if $ligne=~/data-(title=|layout=|action=|show-|tym|slide-|adformat|picture|module|wrapper|interval|is-)/; next if $ligne=~/lmd\.onload/; next if $ligne=~/#graphe_|#container_/; $ligne= $ligne .".";#point final pour les titres $texte = $texte . "$ligne\n"; } close FIC; #NETTOYAGE SUPPLÉMENTAIRE $texte=~s/\{[^\}]*\}\)?;?//g; $texte=~s/\(function\(window\).+\(window//g; $texte=~s/\.\.\n/./g; $texte=~s/…\.\n/./g; $texte=~s/\. \.\n/./g; $texte=~s/\?\.\n/./g; $texte=~s/Lire aussi\..+\.//g; #$texte=~s/:\.\n/./g; $texte=~s/\}\);\.//g; $texte=~s/\);\.//g; $texte=~s/\},\.//g; if (!(exists $dico{$texte})) { $dico{$texte} = 1; print OUT "$texte\n"; print OUT2 ""; print OUT2 "$texte\n\n"; } close OUT; close OUT2; } } } }