#/usr/bin/perl use strict; use warnings; use utf8; use XML::RSS; <:encoding(utf-8)", "sortie-$rubrique-xmlrss.txt"); open(OUTXML, ">:encoding(utf-8)", "sortie-$rubrique-xmlrss.xml"); print OUTXML "\n"; print OUTXML "\n"; open(TALISMANE, ">:encoding(utf-8)", "sortie-$rubrique-talismane.txt"); #---------------------------------------- &parcoursarborescencefichiers($rep); #procédure récursive close OUT; print OUTXML "\n"; close OUTXML; close TALISMANE; exit; # procedures 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 =~ /^\.\.?$/; $file = $path."/".$file; if (-d $file) { print "on entre dans $file \n"; &parcoursarborescencefichiers($file); # procédure récursive } if (-f $file) { if ($file=~/$rubrique.+\.xml$/) { # parsing du fichier RSS print $i++," : $file \n"; my $rss=new XML::RSS; eval {$rss->parsefile($file); }; if( $@ ) { $@ =~ s/at \/.*?$//s; # module line number print STDERR "\nERROR in '$file':\n$@\n"; } else { my $concatenation; # déclaration de la variable pour l'étiquetage par Talismane foreach my $item (@{$rss->{'items'}}) { my $description=$item->{'description'}; # stockage du contenu entre les balises title et description my $titre=$item->{'title'}; my ($titreNettoye,$descriptionNettoye) = &nettoyage($titre,$description); if (exists $doublons{$titreNettoye}) { $doublons{$titreNettoye}++; # recherche des doublons } else { $doublons{$titreNettoye}=1; my $titreNettoyeTalismane = $titreNettoye ; # creation des variables des titres nettoyés qu'on peut modifier pour talismane my $descriptionNettoyeTalismane = $descriptionNettoye ; $titreNettoyeTalismane =~ s/([…\.\?\!]+)/$1\n/g; # changement du contenu pour le meilleur étiquetage par talismane $descriptionNettoyeTalismane =~ s/([…\.\?\!]+)/$1\n/g; $concatenation = $concatenation ."££debuttitre££\n\n". $titreNettoyeTalismane . "££fintitre££\n\n" . "££debutdescription££\n\n" . $descriptionNettoyeTalismane . "££findesciption££\n\n"; # concaténation des titres et des descriptions pour Talismane print "*** écriture dans le fichier txt ***\n"; print OUT "$titreNettoye\n"; # écriture d'un fichier txt print OUT "$descriptionNettoye\n"; print "*** écriture dans le fichier xml ***\n"; print OUTXML "\n"; # écriture d'un fichier xml print "-----> Etiquetage TreeTagger\n"; my ($titreTT, $descriptionTT) = &treetagger($titreNettoye, $descriptionNettoye); # étiquetage par Treetagger print OUTXML "$titreTT\n"; print OUTXML "$descriptionTT\n"; print OUTXML "\n"; } } # etiquetage par Talismane print "*** écriture du fichier de sortie talismane ***"; my $etiquetageTalismane = &talismane($concatenation); print TALISMANE "##$file\n\n$etiquetageTalismane"; } } } } } #----------------------------------------------- sub nettoyage { my ($element1, $element2) = @_; # on accède aux éléments de la variable @_ qui contient les données textuelles des titres et des descriptions # traitement $element1 .= "." ; # on rajoute un point à la fin de chaque phrase, deuxième élément n'en a pas besoin $element1, $element2 =~ s/&#39;/'/g; # on change les &#39; en apostrophes $element1, $element2 =~ s/'/'/g; # on change les ' en apostrophes $element1, $element2 =~ s/&#34;/"/g; # on change les /&#34; en guillements $element1, $element2 =~ s/"/"/g; # on change les /" en guillements $element1, $element2 =~ s/é/é/g; # on change les ಡ en é (bien transcodé grace à l'usage de utf8 au début du script) $element1, $element2 =~ s/ê/ê/g; # on change les ê en ê (bien transcodé grace à l'usage de utf8 au début du script) $element1, $element2 =~ s/
//g; return $element1, $element2; # on renvoie deux éléments passés par le nettoyage } #----------------------------------------------- sub treetagger { my $varTitre = $_[0]; my $varDesc = $_[1]; my $titretagge; my $desctagge; open (TMP, ">:encoding(utf-8)", "temp.txt"); # création d'un fichier temporaire qui contiendra le titre nettoyé print TMP $varTitre ; close TMP; system("perl ../../../../prog/TreeTagger/cmd/tokenise-utf8.pl -f temp.txt | ../../../../prog/TreeTagger/bin/tree-tagger ../../../../prog/TreeTagger/lib/french.par -token -lemma -no-unknown > temp_tag.txt"); # tokenization, étiquetage system("perl ../../../../prog/TreeTagger/cmd/treetagger2xml-utf8.pl temp_tag.txt UTF-8"); local $/=undef; open(FIC1, "<:encoding(utf-8)", "temp_tag.txt.xml"); # ouverture du fichier temporaire contenant le résultat de l'etiquetage $titretagge = ; # stockage du contenu dans la variable titretagge close FIC1; $titretagge =~ s/<\?xml.+?>//; # suppression de la première ligne open (TMP, ">:encoding(utf-8)", "temp.txt"); # création d'un fichier temporaire qui contiendra la description nettoyée print TMP $varDesc ; close TMP; system("perl ../../../../prog/TreeTagger/cmd/tokenise-utf8.pl -f temp.txt | ../../../../prog/TreeTagger/bin/tree-tagger ../../../../prog/TreeTagger/lib/french.par -token -lemma -no-unknown > temp_tag.txt"); # tokenization, étiquetage system("perl ../../../../prog/TreeTagger/cmd/treetagger2xml-utf8.pl temp_tag.txt UTF-8"); local $/=undef; open(FIC1, "<:encoding(utf-8)", "temp_tag.txt.xml"); # ouverture du fichier temporaire contenant le résultat de l'etiquetage $desctagge = ; # stockage du contenu dans la variable desctagge close FIC1; $desctagge =~ s/<\?xml.+?>//; # suppression de la première ligne return $titretagge, $desctagge; } #----------------------------------------------- sub talismane { my $var = shift @_; my $lefile; open (TMP, ">:encoding(utf-8)", "bao1_test.txt"); print TMP $var; close TMP; system("java -Xmx1G -Dconfig.file=talismane-fr-5.0.4.conf -jar talismane-core-5.1.2.jar --analyse --sessionId=fr --encoding=UTF8 --inFile=bao1_test.txt --outFile=bao1_test.tal"); # il faut s'assurer que le fichier zip est aussi présent dans le dossier du travail local $/=undef; open(FIC1, "<:encoding(utf-8)", "bao1_test.tal"); # ouverture du fichier temporaire contenant le résultat de l'etiquetage $lefile = ; # stockage du contenu close FIC1; return $lefile; }