#/usr/bin/perl
<<DOC; 
Votre Nom : Yousef ABUSALHA
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]";
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>SF</NOM>\n";
close (FILEOUT);
#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la rcursion.... et elle se terminera aprs examen de toute l'arborescence
#----------------------------------------
open (FILEOUT,">>:encoding(utf-8)", $output1);
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);	#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 (OUT, ">>:encoding($codage)", "fichier$rubrique.txt");
                open (OUT2, ">>:encoding($codage)", "fichier$rubrique.xml");
                
                #cette partie fait :
                #ramne tout le flux textuel de FIC sur une seule ligne
                # supprime les retour ˆ la ligne
                # ConcatŽnation <.>
                my $texte="";
                while (my $ligne = <FIC>) {
                    chomp $ligne;
                    $ligne =~ s/\r//g;
                    $texte = $texte . $ligne;
                }
                #ICI : on supprime les vides, l'espaces et tabulation entre les balises 
                # Extraire le contenu textuel des balises item et description
                close FIC; 
                $texte =~ s/>\s+</></g;
                while ($texte =~/<item><title>([^<]+?)<\/title><link>(?:[^<]+?)<\/link><description>([^<]+?)<\/description>/g) {
		    my $titre = $1;
		    my $description = $2;
		    
		    #On nettoie les textes extrait ˆ l'aide des expressions rŽgulires 
		    $titre=~s/&lt;.+?&gt;//g;
		    $titre.=".";
		    $titre=~s/\?\.$/\?/;
		    $description=~s/&lt;.+?&gt;//g;
		    if (!(exists $dico{$titre})) { # les fichiers xml de sortie 
			$dico{$titre} = 1;
			print OUT "$titre\n";
			print OUT "$description\n\n";
            my ($titretag,$descriptiontag) = &etiquetage($titre,$description);
			print OUT2 "<item><title>$titretag</title><description>$descriptiontag</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;
system("perl tokenise-utf8.pl titre.txt | ./tree-tagger -token -lemma -no-unknown french-oral-utf-8.par > titre_tag.txt");
system("perl treetagger2xml-utf8.pl 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 = <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 -token -lemma -no-unknown french-oral-utf-8.par > description_tag.txt");
system("perl treetagger2xml-utf8.pl 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 = <TMP2>;
while (my $ligne = <TMP2>) {
        #chomp $ligne;
        $d_tag = $d_tag . $ligne;
    }
close TMP2;



return($t_tag,$d_tag);
}

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