#/usr/bin/perl
<<DOC; 
Votre Nom : Picard
JANVIER 2005

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 $DUMPFULL1="";
#----------------------------------------
my $output1="SORTIE.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};

my $output2="SORTIE.txt";
if (!open (OUTPUT2,">$output2")) { die "Pb a l'ouverture du fichier $output2"};

my $output3="mot.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>PICARD</NOM>\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");
	    print FICHIER "<fichier>\n <name>".$file."</name>\n";
	    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="mot.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,">mot.txt");
	       
		   
                    $DUMPFULL1 = $DUMPFULL1 . $filtr ;

		     $cont=$cont.$contenu;
	     
	          } 
	      }

	 open (FICHIER, ">>outtagger.txt");
	 print FICHIER "</fichier>\n";
	 close (FICHIER);

	 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>PICARD</NOM>\n";
    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 "</fichier>\n";
    print Sortie "</ETIQUETAGE>\n";
    print Sortie "</PARCOURS>\n";
}

# Fermeture des tampons
sub ferme {
    close(Entree);
    close(Sortie);
}
