#/usr/bin/perl
use HTML::Entities ; 
<<DOC; 
Votre Nom : HELMAn_Agathe
JANVIER 2016
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter
 Le programme construit en sortie un fichier structuré contenant sur chaque
 ligne le nom du fichier et le résultat du filtrage :
<FICHIER><NOM>du fichier</NOM></FICHIER><CONTENU>du filtrage</CONTENU></FICHIER>
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 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print FILEOUT1"<parcours>\n";
print FILEOUT1 "<nom>HELMAn_Agathe</nom>\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 "</parcours>\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 "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	#recurse!
			print "<FIN REPERTOIRE> ==> ",$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 = <FIC>) {
                    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+</></g;			# Suppression des espaces entre les balises
                while ($texte =~/<item>.*?<title>([^<]+?)<\/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/&lt;.+?&gt;//g;	
					$titre.=".";
					$titre=~s/\?\.$/\?/;
					$titre=~s/&/&amp;/g;
					$description=~s/&lt;.+?&gt;//g;
					$description=~s/&/&amp;/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</title><description>$descriptiontag</description></item>\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 = <TMP2>;
	while (my $ligne = <TMP2>) {
        #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 = <TMP2>;
	while (my $ligne = <TMP2>) {
        #chomp $ligne;
        $d_tag = $d_tag . $ligne;
    }
	close TMP2;

return($t_tag,$d_tag);
}

#----------------------------------------------
