#/usr/bin/perl
<<DOC; 
Votre Nom : Thomas Ragot
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]";

$rep=~ s/[\/]$//;

my $dumpfull="";
my $tagfull="";
my $xmlfull="";
my $xmltagfull="";
my $entetexml= "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>";
my @output = ("resultats/".$rep."sortie.txt", "resultats/".$rep."sortietag.txt", "resultats/".$rep."sortie.xml", "resultats/".$rep."sortietag.xml");

#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------

ecritDansFichier ($output[0], $dumpfull);
ecritDansFichier ($output[1], $tagfull);
ecritDansFichier ($output[2], "$entetexml\n<?xml-stylesheet type=\"text/xsl\" href=\"sortie.xsl\"?><PARCOURS><NOM>Thomas Ragot</NOM>\n<FILTRAGE>$xmlfull</FILTRAGE>\n</PARCOURS>\n");
ecritDansFichier ($output[3], "$entetexml\n<?xml-stylesheet type=\"text/xsl\" href=\"sortietag.xsl\"?><PARCOURS><NOM>Thomas Ragot</NOM>\n<ETIQUETAGE>$xmltagfull</ETIQUETAGE>\n</PARCOURS>\n");

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) 
		{
		my $dumpfile="";
		my $tagfile="";
		my $xmlfile="";
		my $xmltagfile="";


		open(FILEINPUT, $file );
		while ($line = <FILEINPUT>)
			{
			if ($line=~/<description>(.*)<\/description>/) 
				{
				$line="$1\n";
				$line=corrige_caracteres($line);
				$tagline= treetagger ($line);
				$xmltagline= traitementxml($tagline);

				$dumpfile .= "$line\n";
				$tagfile .= "$tagline\n";
				$xmlfile .= "<file><name>$file</name><lines>$line</lines></file>\n";
				$xmltagfile .="<file><name>$file</name>$xmltagline</file>";

     		}
			}
		close(FILEINPUT) ;
		$dumpfull .= "$dumpfile\n";
		$tagfull .= "$tagfile\n";
		$xmlfull .= "$xmlfile\n";
		$xmltagfull .= "$xmltagfile\n";

		print $i++,"\n";
		}
    	}
}

sub traitementxml 
{
	my $tag = "";
	my @lines = split(/\n/,shift(@_));
	foreach $line (@lines)
	{
		if ($line!~/\ô\¯\:\\ô\¯\:\\/) 
		{
		# Remplacement des guillemets par <![CDATA["]]> (évite erreur d'interprétation XML)
	    	$line=~s/\"/<![CDATA[\"]]>/g;
	    	$line=~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>/;
		$line=~s/<(unknown)>/$1/g;	
	    	$tag .= $line;
		}
    	}
return $tag;

}


sub corrige_caracteres
{
	$line = shift;
	$line =~ s/&#38;#39;/\'/g;
	$line =~ s/&#38;#34;/\"/g;
	$line =~ s/&#233;/é/g;
	$line =~ s/&#234;/ê/g;
	$line =~ s/Ãª/ê/g;
	$line =~ s/Ã¨/è/g;
	$line =~ s/Ã§/ç/g;
	$line =~ s/Ã©/é/g;
	$line =~ s/Ã/à/g;
	$line =~ s/à´/ô/g;
	return $line;
}
sub treetagger
{
	my $line=shift;
	open (TMP, ">ligne.txt" );
	print TMP $line; 
	close  (TMP) ;
	$linetokenise = `perl tokenize.pl -f ligne.txt`;
	open (TMP, ">ligne.txt" );
	print TMP $linetokenise; 
	close  (TMP) ;
	system ("TreeTagger/bin/tree-tagger.exe -token -lemma -no-unknown TreeTagger/lib/french.par ligne.txt tag.txt");
	open (TMP, "tag.txt" );
	@tagline=<TMP>;
	close  (TMP) ;
	print $tagline;
	return join("",@tagline);
	
}

sub ecritDansFichier
{
	$fichier=shift;
	$contenu=shift;
if (!open (FICHIER,">$fichier")) { die "Pb a l'ouverture du fichier $fichier"};
	print FICHIER $contenu ;
	close (FICHIER);
}
