#/usr/bin/perl
<<DOC; 
Votre Nom : 
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
#-----------------------------------------------------------
$ARGV[0]="arbo-fils";
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_etiquetage_1.xml";
if(!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
open (OUTTAG,">>resultat_taggage.txt");
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>ACHOURI Samia</NOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</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 =~ /^\.\.?$/;
	$file = $path."/".$file;
	if (-d $file) {
	    &parcoursarborescencefichiers($file);	#recurse!
	}
	if (-f $file) {
        open(F,$file);
        while($ligne=<F>) {
	 	if ($ligne=~/<description>(.+)<\/description>/) {
			$temp=$1;
			$temp=~s/&#38;#39;/\'/g; #  &#38;#39; = apostrophe
			$temp=~s/&#38;#34;/"/g; #  &#38;#34; = guillemets ouvrants ou fermants.
			$temp=~s/&#233;/é/g; #   &#233; = é
			$temp=~s/Ã©/é/g;
			$temp=~s/&#234;/ê/g; #  &#234; = ê= accent circonflexe
			$temp=~s/Ãª/ê/g;  #Ãª ê= accent circonflexe
			$temp=~s/Ã¨/è/g;
			$temp=~s/Ã/à/g;
			$temp=~s/Ã§/ç/g;
			$temp=~s/à§/ç/g;
			$temp=~s/Ã´/ô/g;
			$temp=~s/"//g;
            $temp=~s/[ ,.;:?!'_]/\n/g;
			open (TEXTE,">>texte.txt"); #On est dans la "structure condition" qui concerne les fichiers de l'arborescence, pris un à un. Pour chaque fichier (F, $file) il va être créé un fichier texte (temporaire) dans lequel sera affiché le contenu extrait et organisé "un mot par ligne". Dans un premier temps, Tree-tagger va étiqueter dans ces fichiers séparés. En sortie, on doit remettre ces résultats au format demandé (voir instructions). 
			print TEXTE $temp; #Les résultats après les remplacements faits par $temp sont écrits dans un fichier .txt.(pour qu'il puisse être traité par Tree-Tagger. Reste à trouver une variable pour stocker les résultats de CHAQUE FICHIER de l'arborescence.
			close (TEXTE);
            
		$ENV{'PATH'} ="./D/samia/bin;";
	system("set $ENV{'PATH'}");
	system("./bin/tree-tagger.exe -token -lemma -no-unknown ./lib/french.par texte.txt outtagger.txt");
	open (FICTAG,"outtagger.txt") or die "impossible ouvrir le fichier";
	while (<FICTAG>)
	{
		print OUTTAG $_;
	}
	

	$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;
                           $DUMPFULL1.="\n<fichier>\n<nom>$file</nom>\n<contenu>$temp</contenu>\n</fichier>\n";
			}
	    }
        close(F);
	}
   }

}
#----------------------------------------------
