#!/usr/bin/perl
<<DOC;
Format d\'entree : un texte étiqueté et lemmatisé par tree tagger
Format de Sortie : le même texte au format xml
DOC


# Usage
$ChaineUsage="Usage : tt2xml.pl <Fichier>\n";
if (@ARGV!=1) {
 die $ChaineUsage;
}

$t=0;
&ouvre;
&entete;
my $rep="$arg";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
print "Quelle est la balise à extraire ?\n";
$exp=<STDIN>;
chomp $exp;
&parcoursarborescencefichiers($rep);
&fin;
&ferme;



# Récupération des arguments et ouverture des tampons


sub ouvre {
$arg = $ARGV[0];
    $FichierSortie= $arg . ".xml";
    open(Sortie,">$FichierSortie");
}
# Entête de document XML
sub entete {
    print Sortie "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>\n<?xml-stylesheet type=\"text/xsl\" href=\"StyleT.xsl\"?>\n";
    print Sortie "<document>\n<Nom>Aurélia Trinquier</Nom>\n";
}

sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(DIR, $path) or die "ne peut ouvrir $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);

	    print Sortie "<fichier>\n<nom>$file</nom>\n";
while ($ligne = <FILEINPUT>)
    {
if ($ligne=~/<$exp>(.*)<\/$exp>/)
   { open(OUTPUT,">resultats.txt");
     print Sortie "<description>\n";
       $ligne=$1;

# Rectification des problèmes de codage

       $ligne=~s/(&#38;#39;)/\'/g;
       $ligne=~s/(&#38;#34;)/\"/g;     
       $ligne=~s/à©/é/g;
       $ligne=~s/Ã©/é/g;       
       $ligne=~s/Ãª/ê/g;
       $ligne=~s/Ã¨/è/g;
       $ligne=~s/Ã/à/g;
       $ligne=~s/Ã§/ç/g;
       $ligne=~s/à§/ç/g;
       $ligne=~s/à´/ô/g;    
       $ligne=~s/(&#233;)/é/g;
       $ligne=~s/(&#234;)/ê/g;    

# Séparation du texte en 1 mot par ligne

		  $ligne=~s/( )/\n/g;
		  $ligne=~s/([,\;:!?\.'\"\(\)])/\n$1\n/g;
print OUTPUT $ligne;

#Fermeture du fichier resultats.txt

close(OUTPUT);


#Lancement du TreeTagger
system ("bin/tree-tagger.exe -token -lemma lib/french.par resultats.txt treetagger.txt");

    open(TREE,"treetagger.txt");

    while ($tree = <TREE>) {
	if ($tree!~/\ô\¯\:\\ô\¯\:\\/ ) {
	# Remplacement des guillemets par <![CDATA["]]> (évite erreur d'interprétation XML)
	    $tree=~s/\"/<![CDATA[\"]]>/g;
	    $tree=~s/(<unknown>)/unknown/g;
           # Suppression des caractères générés par TreeTagger empêchant la bonne formation du fichier xml
            $tree=~s/(.*°I)//g;
       	    $tree=~s/([^\t]*)\t([^\t]*)\t([^\n]*)\n/<element>\n <data type=\"cat\">$2<\/data>\n <data type=\"lemme\">$3<\/data>\n <data type=\"mot\">$1<\/data>\n<\/element>/;

	    print Sortie $tree;
           }
          
       }
       close(TREE);          
       print Sortie "\n</description>\n";
     }
   }


print Sortie "</fichier>\n";
}
# Fin de fichier
sub fin {
    print Sortie "</document>\n";
}
}
}
# Fermeture des tampons
sub ferme {
    close(Sortie);
}
