#/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 $DUMPFULL1="";
#----------------------------------------
my $output1="SORTIE_ETIQUETTAGE.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
open (OUTTAG, ">>resultat_tag.txt");

#----------------------------------------
#récupérer la date du jour sous forme de jj/mm/annee
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $date_du_jour =  $mday."/".($mon+1)."/".(1900+$year);


#--------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!

#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUT "<?xml:stylesheet type=\"text\/xsl\" href=\"SORTIE-etiquetage-xsl.xsl\"?>\n"; 
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM> Nacer(Massinissa) HAMRI </NOM>\n";
print FILEOUT "<DATE> ".$date_du_jour." </DATE>\n";
print FILEOUT "<ETIQUETAGE>".$DUMPFULL1."</ETIQUETAGE>\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) {
#       TRAITEMENT à réaliser sur chaque fichier
        open(FILEINPUT,"$file");
		$fichier  = "<file>";
		$nom = "$file";
		
		$fichier .= "<name>".$nom."</name>";
		$contenu = "";
        while ($ligne = <FILEINPUT>){
		if ($ligne=~/<description>(.*)<\/description>/) 
           { #$ligne =~ s/<description>/ /g;
             #$ligne =~ s/<\/description>/ /g;
			 $l=$ligne;
			 #************************
			 $ligne = $1;
			 $ligne=~ s/&#38;#39;/\'/g; #  &#38;#39; = apostrophe#39;
			 $ligne=~ s/&#38;#34;/"/g; #  &#38;#34; = guillemets ouvrants ou fermants.
			 $ligne=~ s/&#233;/é/g; #   &#233; = é
			 $ligne=~ s/Ã©/é/g;
			 $ligne=~ s/&#234;/ê/g; #  &#234; = ê= accent circonflexe
			 $ligne=~ s/Ãª/ê/g;  #Ãª ê= accent circonflexe
			 $ligne=~ s/Ã¨/è/g;
			 $ligne=~ s/Ã/à/g;
			 $ligne=~ s/Ã§/ç/g;
			 $ligne=~ s/à§/ç/g;
			 $ligne=~ s/Ã´/ô/g;
			 $ligne=~ s/"//g;
             $ligne=~ 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 $ligne; #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/massi/etiquetage/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";
	         
			 #*****************************
			
            #traitement *************
			 while ($ligne = <FICTAG>) {
	            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 $Li;
					$contenu .= $ligne;
					print "contenu=".$ligne;
	                 }
                 }
			#*************************** 
			
          }
           }
		   
             close(FILEINPUT) ;
			 $fichier .= $contenu;
			 $fichier .= "</file>\n";
             print $fichier;
			 $DUMPFULL1 .= $fichier;
#       Insérer ici votre code (le filtreur)
	    print $i++,"\n";
	}
    }
}
#-----