#/usr/bin/perl
<<DOC; 
Votre Nom :HIARD Yann
JANVIER 2005
 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 une variable contenant le flux de sortie ; my=déclare la variable. Pour le moment le contenu de DUMPFULL correspond à des fichiers séparés (du rép. arb-fils)
my $DUMPFULL1="";
#----------------------------------------
my $output1="SORTIE_sansetiquetage.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};

my $output2="SORTIE_sansetiquetage.txt";
if (!open (OUTPUT2,">$output2")) { die "Pb a l'ouverture du fichier $output2"};

my $output3="SORTIE_2.txt";
if (!open (OUTPUT3,">$output3")) { die "Pb a l'ouverture du fichier $output3"};

#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>HIARD</NOM>\n";
print FILEOUT "<PRENOM>Yann</PRENOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";

print OUTPUT2 $cont;

close(FILEOUT);
close(FILEOUT2);
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 =~ /^\.\.?$/;
	$file = $path."/".$file;
	if (-d $file) {
	    &parcoursarborescencefichiers($file);	#recurse!
	}
	if (-f $file) {
	    &ouvre;
	    &entete;
	    open (FILEIN,"$file");
	    open (FICHIER, ">outtagger.txt");
	    close (FICHIER);
	    while ($ligne = <FILEIN>){
		if ($ligne=~/<description>([^<]+)<\/description>/) {
		    $filtr= "<FICHIER><NOM>".$file."</NOM><CONTENU>".$1."</CONTENU></FICHIER>";
		    $contenu =$1."\n";
		    $contenu=~s/(['":!\?\.\-\(\)\[\]\{\}\-])/\n$1\n/g; 
                    $contenu=~s/(&#38;#39;)/\n'\n/g;
		    $contenu=~s/(&#38;#34;)/\n"\n/g;
		    $contenu=~s/([,])/\n$1/g;
		    $contenu=~s/(Ã©|&#233;)/é/g;
		    $contenu=~s/&#234;/ê/g;
		    $contenu=~s/Ã¨/è/g;
		    $contenu=~s/Ã´/ô/g;
		    $contenu=~s/Ã[^.*]/à/g;
		    $contenu=~s/[ ]/\n/g;

	            print OUTPUT3 $contenu;
	            close (OUTPUT3);
	            my $texte="SORTIE_2.txt";
                    $ENV{'PATH'} = "./bin;";
                    system("set $ENV{'PATH'}");
                    system("./bin/tree-tagger.exe -token -lemma -no-unknown ./lib/french.par $texte >>outtagger.txt");
		    &traitement;
		    open (OUTPUT3,">SORTIE_2.txt");
                    $DUMPFULL1 = $DUMPFULL1 . $filtr ;
		     $cont=$cont.$contenu;
	          } 
	      }
	open (FICHIER, ">>outtagger.txt");


	 close (FILEIN);
	 print $i++,"\n";
         }
   &fin;
   &ferme;  			     
   }
}
#----------------------------------------------
# Récupération des arguments et ouverture des tampons
sub ouvre {
    my $FichierEntree="outtagger.txt";
    open(Entree,$FichierEntree);
    $FichierSortie=$FichierEntree . ".xml";
    open(Sortie,">$FichierSortie");
}

# Entête de document XML
sub entete {
    print Sortie "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>\n";
    print Sortie "<PARCOURS>\n";
    print Sortie "<NOM>HIARD</NOM>\n";
    print Sortie "<PRENOM>Yann</PRENOM>";
    print Sortie "<ETIQUETAGE>\n";    
}
# Traitement
sub traitement {
    while ($Ligne = <Entree>) 
    {
	if ($Ligne!~/\ô\¯\:\\ô\¯\:\\/) {
	    # Remplacement des guillemets par <![CDATA["]]> (évite erreur d'interprétation XML)
	    $Ligne=~s/\"/<![CDATA[\"]]>/g;
	    $Ligne=~s/([^\t]*)\t([^\t]*)\t(.*)/<element>\n <data type=\"type\">$2<\/data>\n <data type=\"lemma\">$3<\/data>\n <data type=\"string\">$1<\/data>\n<\/element>/;
	    print Sortie $Ligne;
	}
    }
}
# Fin de fichier
sub fin {
    print Sortie "</ETIQUETAGE>\n";
    print Sortie "</PARCOURS>\n";
}
# Fermeture des tampons
sub ferme {
    close(Entree);
    close(Sortie);
}
