#/usr/bin/perl

use utf8;
use HTML::Entities;

<<DOC; 
Votre Nom : ALKHADHAR Noor et HERNANDEZ Madeleine 
JANVIER 2017
 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]";
my $rubrique = "$ARGV[1]";
my %dico;
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie 
#----------------------------------------

my $output0="$rubrique.txt";
if (!open (FILEOUT,">$output0")) { die "Pb a l'ouverture du fichier $output0"};
close(FILEOUT);

my $output1="$rubrique.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};

print FILEOUT "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>ALKHADHAR - HERNANDEZ</NOM>\n";
print FILEOUT "<FILTRAGE>\n";
close (FILEOUT);
#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la récursion
#----------------------------------------
open (FILEOUT,">>:encoding(utf-8)", $output1);
print FILEOUT "</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
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);	# recursion
	    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 (OUT0, ">>:encoding($codage)", "$rubrique.txt");
                open (OUT1, ">>:encoding($codage)", "$rubrique.xml");
                #ramener tout le flux textuel de FIC sur une seule ligne
                my $texte="";
                while (my $ligne = <FIC>) {
                    chomp $ligne;
                    $ligne =~ s/\r//g;
                    $texte = $texte . $ligne;
                }
                close FIC;
                $texte =~ s/>\s+</></g;
				$texte = decode_entities($texte);
				
                while ($texte =~ /<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description>/g) {
					my $titre = $1;
					my $description = $2;
					
					# $titre.=".";
					# $titre=~s/&lt;.+?&gt;//g;
					# $titre=~s/\?\.$/\?/;
					# $description=~s/&lt;.+?&gt;//g;
					
					if (!(exists $dico{$titre})) {
						$dico{$titre} = 1;
						my ($titretag,$descriptiontag) = &etiquetage($titre,$description);
						
						print OUT0 "$titre\n";
						print OUT0 "$description\n\n";
						print OUT1 "<item>\n<title>$titretag</title>\n<description>$descriptiontag</description>\n</item>\n\n";
					}
				}
                close OUT0;
                close OUT1;
                # fin de traitement du fichier
            }
        }
    }
}

sub etiquetage {

my ($t,$d)= @_;
open(TMP0,">>:encoding(utf8)","titre.txt");
print TMP0 "$t.\n";
close TMP0;
system("perl tokenise-utf8.pl titre.txt | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > titre_tag.txt");
system("perl treetagger2xml-utf8.pl titre_tag.txt utf8");   #résultat est contenu dans titre_tag.txt.xml
open(TMP1, "<:encoding(utf8)","titre_tag.txt.xml");
my $t_tag="";
my $ligne = <TMP1>;
while (my $ligne = <TMP1>) {
        #chomp $ligne;
        $t_tag = $t_tag . $ligne;
    }
close TMP1;

open(TMP0,">>:encoding(utf8)","description.txt");
print TMP0 "$d\n";
close TMP0;
system("perl tokenise-utf8.pl description.txt | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > description_tag.txt");
system("perl treetagger2xml-utf8.pl description_tag.txt utf8");   #résultat est contenu dans description_tag.txt.xml
open(TMP1, "<:encoding(utf8)","description_tag.txt.xml");
my $d_tag="";
my $ligne = <TMP1>;
while (my $ligne = <TMP1>) {
        #chomp $ligne;
        $d_tag = $d_tag . $ligne;
    }
close TMP1;



return($t_tag,$d_tag);
}

#----------------------------------------------
