#/usr/bin/perl use HTML::Entities ; <du fichierdu filtrage DOC #----------------------------------------------------------- my $rep="$ARGV[0]"; # on s'assure que le nom du répertoire ne se termine pas par un "/" $rep=~ s/[\/]$//; # on initialise deux variables contenant le flux de sortie my $DUMPFULL1=""; my $DUMPFULL2=""; my %dico; my $codage = "utf-8" ; my $rubrique = "$ARGV[1]"; #---------------------------------------- my $output1="$rubrique.xml"; my $output2="$rubrique.txt"; if (!open (FILEOUT1,">:encoding($codage)",$output1)) { die "Pb a l'ouverture du fichier $output1"}; if (!open (FILEOUT2,">:encoding($codage)",$output2)) { die "Pb a l'ouverture du fichier $output2"}; print FILEOUT1 "\n"; print FILEOUT1"\n"; print FILEOUT1 "HELMAn_Agathe\n"; close (FILEOUT1); close (FILEOUT2); #---------------------------------------- &parcoursarborescencefichiers($rep); # on lance la récursion.... et elle se terminera après examen de toute l'arborescence #---------------------------------------- open (FILEOUT1,">>:encoding(utf-8)", $output1); print FILEOUT1 "\n"; close(FILEOUT1); exit; #---------------------------------------------- sub parcoursarborescencefichiers { my $path = shift(@_); opendir(DIR, $path) or die "can't open $path: $!\n"; my @files = readdir(DIR); closedir(DIR); foreach my $file (@files) { next if $file =~ /^\.\.?$/; next if $file =~ /^\._/; next if $file =~ /^fil/; $file = $path."/".$file; if (-d $file) { print " ==> ",$file,"\n"; &parcoursarborescencefichiers($file); #recurse! print " ==> ",$file,"\n"; } if (-f $file) { if ($file =~ /$rubrique.+\.xml$/) { print "<",$i++,"> ==> ",$file,"\n"; $codage = "utf-8"; open (FIC, "<:encoding($codage)", $file); open (OUT1, ">>:encoding($codage)", "$output1"); open (OUT2, ">>:encoding($codage)", "$output2"); #ramener tout le flux textuel de FIC sur une seule ligne my $texte=""; while (my $ligne = ) { chomp $ligne; # Suppression du retour a la ligne $ligne =~ s/\r//g; # Suppression des éventuels retours à la ligne Windows $texte = $texte . $ligne; # Concaténation de la ligne lue dans la variable $texte } close FIC; $texte =~ s/>\s+.*?([^<]+?)<\/title>.*?<description>([^<]+?)<\/description>/g) { # Recherche des titres et des descriptions à l'intérieur des balises <item> my $titre = $1; my $description = $2; # Nettoyage du texte extrait $titre=~s/<.+?>//g; $titre.="."; $titre=~s/\?\.$/\?/; $titre=~s/&/&/g; $description=~s/<.+?>//g; $description=~s/&/&/g; decode_entities($description) ; decode_entities($description) ; # Conversion des entités html if (!(exists $dico{$titre})) { $dico{$titre} = 1; print OUT2 "$titre\n"; # Impression sur le fichier texte print OUT2 "$description\n\n"; my ($titretag,$descriptiontag) = &etiquetage($titre,$description); # Appel de la fonction d'étiquetage print OUT1 "<item><title>$titretag$descriptiontag\n"; # Impression du texte taggé sur le fichier XML. } } close OUT1; close OUT2; # fin de traitement du fichier } } } } #---------------------------------------------- sub etiquetage { my ($t,$d)= @_; open(TMP,">:encoding(utf8)","titre.txt"); print TMP $t; close TMP; system("perl tokenise-utf8.pl titre.txt | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > titre_tag.txt"); system("treetagger2xml-utf8.exe titre_tag.txt utf8"); # résultat qui 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; system("perl tokenise-utf8.pl description.txt | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > description_tag.txt"); system("treetagger2xml-utf8.exe description_tag.txt utf8"); # résultat qui 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); } #----------------------------------------------