#/usr/bin/perl
<<DOC; 
Votre Nom : Svetlana_Tsarkova
01 FEVRIER 2006
 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 $DUMPFULL1="";
#----------------------------------------
my $output1="SORTIE-treetagger.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Svetlana_Tsarkova</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(FILEINPUT, $file);
		while ($ligne = <FILEINPUT>)
		{
			if ($ligne =~/<description>([^<]+)<\/description>/) {
				
				my $nettoye=$1;
				$nettoye = $1;
				$nettoye =~s/Ã§/ç/g;
				$nettoye =~s/&#38;#39;/\'/g; 
				$nettoye =~s/&#38;#34;/\"/g; 
				$nettoye =~s/Ã©/é/g; 
				$nettoye =~s/&#233;/é/g; 
				$nettoye =~s/&#234;/ê/g; 
				$nettoye =~s/Ã¨/è/g;
				$nettoye=~ s/à´/ô/g;
				$nettoye =~s/Ã/à/g;
				
				$nettoye =~s/([^\A-Za-zéèàëêâùïçôîÉÈÀÊÔÂÎÏËÙÇ'])/\n$1\n/gi;
				$nettoye=~ s/\'/\'\n/g;

				open (FIC, ">treetag.txt");
                                print FIC $nettoye;
				close (FIC);
				
				my $texte="treetag.txt";
				$ENV{'PATH'} = "./bin;";
				system("set $ENV{'PATH'}");
				system("./bin/tree-tagger.exe -token -lemma -no-unknown ./lib/french.par $texte outtagger.txt");
				open (FIC,">outtagger.txt");
				
				$DUMPFULL1 .= "<fichier><nom>$file</nom><contenu>$nettoye</contenu></fichier>\n";
			}
		}
	print $i++;
	}
    }
}
#----------------------------------------------
# Récupére des arguments et ouvre des tampons
                	sub ouvre {
                     	$FichierEntree="treetag.txt";
                    	open(Entree,$FichierEntree);
                	}



			# Traitement
                	sub traitement {
				if (!open (FILEOUT,">>$output1")) { die "Pb a l'ouverture du fichier $output1"};
				
                   		while ($Ligne = <Entree>) {
                        		if ($Ligne!~/\ô\¯\:\\ô\¯\:\\/) {
					# Remplace 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 FILEOUT "$Ligne";
	               			}
                    		}
			
                	}


			# Fermeture des tampons
                	sub ferme {
                    		close(Entree);
                	}
            
            			
    	close(FILEINPUT);
	print $i++,"\n";
    
	if (!open (FILEOUT,">>$output1")) { die "Pb a l'ouverture du fichier $output1"};
	print FILEOUT "</fichier>"."\n";

	system ("rm","temp.txt");	
}
    }		
	return();	
}	
#----------------------------------------------


