#/usr/bin/perl # - appel du programme : perl bao1-2.pl "2016" "3210" ############################## PRÉPARATION DES FICHIERS D'ENTRÉE ET DE SORTIE ######################################### my $rep="$ARGV[0]";# ouverture du repertoire my $rubrique = "$ARGV[1]"; my %dico; $rep=~ s/[\/]$//;# supprimer le dernier "/" # on initialise une variable contenant le flux de sortie #---------------------------------------- my $output1="$rubrique.xml"; if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"}; print FILEOUT "\n"; print FILEOUT "\n"; print FILEOUT "Votre nom\n"; close (FILEOUT); #---------------------------------------- &parcoursarborescencefichiers($rep); # on lance la récursion.... et elle se terminera après examen de toute l'arborescence #---------------------------------------- open (FILEOUT,">>:encoding(utf-8)", $output1); print FILEOUT "\n"; close(FILEOUT); exit; #---------------------------------------------- ############################### Definition de la fonction ################################ #Cette fonction va parcourir tout le contenu d'un répertoire en mode récursif, et renvoyer dans un tableau la liste de tous les fichiers trouvés et leurs chemins. sub parcoursarborescencefichiers { # sub est équivalent de def en python my $path = shift(@_); #RAPPEL -@_--> contient les arguments passés au sous-programme en cours ( sub );$_ est l'itérateur par défaut de foreach quand aucune variable n'est fournie explicitement. # -La fonction shift -->prend un tableau en argument ; elle supprime son premier élément (les autres sont alors décalés) et renvoie cet élément opendir(DIR, $path) or die "can't open $path: $!\n"; # Lecture de la liste des fichiers #RAPPEL - Avec la fonction opendir le répertoire est ouvert. DIR est un nom attribué au descripteur de répertoire. De plus, la fonction reçoit comme paramètre la scalaire dans laquelle le répertoire désiré est sauvegardé. Au cas où le répertoire ne peut pas être ouvert, le script se termine par l'appel de la fonction Autre page d'information die. my @files = readdir(DIR); closedir(DIR); foreach my $file (@files) { next if $file =~ /^\.\.?$/; $file = $path."/".$file; #2016/01/19,00,00 #-------------------------réalisation de la récursion de la procedure--------------- if (-d $file) { #RAPPEL -d -->si $file est un repertoire : &parcoursarborescencefichiers($file); #recurse! } if (-f $file) { #RAPPEL -f -->si $file est un fichier : # TRAITEMENT à réaliser sur chaque fichier # Insérer ici votre code (le filtreur) if ($file =~ /$rubrique.+\.xml$/) { print "<",$i++,"> ==> ",$file,"\n"; # ouverture du fichier en lecture, traitement pour extraire texte $codage = "utf-8"; open (FIC, "<:encoding($codage)", $file); open (OUT, ">>:encoding($codage)", "$rubrique.txt");# ouverture de la sortie en ecriture qui contiendra les donnes textuelles brutes open (OUT2, ">>:encoding($codage)", "$rubrique.xml");# ouverture de la sortie XML tagguee #ramener tout le flux textuel de FIC sur une seule ligne my $texte=""; #Solution 1 ---------à supprimer les retours à la ligne-------- while (my $ligne = ) { # pour chaque ligne du fichier en lecture chomp $ligne; $ligne =~ s/\r//g; # supprimer tous les retours chariot windows $texte = $texte . $ligne; } close FIC; #Solution 2---------- à supprimer les retours à la ligne-------- #while (my $ligne = <$in>) { # if ($ligne =~/\r\n/){ # $ligne=~ s/\r\n//; # } # else{ # chomp $ligne; # } # nettoyage $ligne =~ s/'/'/; $texte =~ s/>\s+< /g; while ($texte =~ /< item>.*?< title>(.+?)<\/title>.*?< description>(.+?)<\/description>/g){ my $titre = $1; my $description = $2; $titre=~s/<.+?>//g; $titre.="."; $titre=~s/\?\.$/\?/; $description=~s/<.+?>//g; if (!(exists $dico{$titre})) { $dico{$titre} = 1; print OUT "$titre\n"; print OUT "$description\n\n"; print OUT2 "< item>< title>$titre< /title>< description>$description< /description>< /item>\n"; } } close OUT; close OUT2;# fin de traitement du fichier } } } } #---------------------------------------------- sub etiquetage { my ($t,$d)= @_; open(TMP,">:encoding(utf8)","titre.txt"); print TMP $t; close TMP; ############## Appel d'un shell pour lancer treetagger ############### system("perl tokenise-utf8.pl titre.txt | ./tree-tagger -token -lemma -no-unknown french-utf8.par > titre_tag.txt"); system("./treetagger2xml-utf8-macosx titre_tag.txt utf8"); #rÈsultat est contenu dans titre_tag.txt.xml open(TMP2, "<:encoding(utf8)","titre_tag.txt.xml"); my $t_tag=""; my $ligne = ; while (my $ligne = ) { #chomp $ligne; $t_tag = $t_tag . $ligne; } close TMP2; open(TMP,">:encoding(utf8)","description.txt"); print TMP $d; close TMP; ############## Appel d'un shell pour lancer treetagger ############### system("perl tokenise-utf8.pl description.txt | ./tree-tagger -token -lemma -no-unknown french-utf8.par > description_tag.txt"); system("./treetagger2xml-utf8-macosx description_tag.txt utf8"); #rÈsultat est contenu dans titre_tag.txt.xml open(TMP2, "<:encoding(utf8)","description_tag.txt.xml"); my $d_tag=""; my $ligne = ; while (my $ligne = ) { #chomp $ligne; $d_tag = $d_tag . $ligne; } close TMP2; return($t_tag,$d_tag); } #----------------------------------------------