#===================================================================
#                    Etiquetage avec Treetagger        
#===================================================================

<<DOC;

MAAFA ZAHIR DESS IM INALCO
FEVRIER 2006

Usage:     perl    <etiquette-avec-tree-tagger.pl>    <nom-du-fichier-xml>
 
Le programme prend en entrée le nom du fichier xml  contenant les textes à traiter
le programme construit en sortie un fichier xml  contenant le résultat de l'étiquetage.
 

DOC


#=============== LE  PROGRAMME  PRINCIPAL ==================

#!/usr/bin/perl
use warnings;
use diagnostics;
use strict;
#==================== déclaration des variables  ====================

my $i=0;
my $ch;   # contient le texte a étiqueter à chaque iteration
my $nom;  # nom du fichier xml source du texte
my $ligne;
my $texte=$ARGV[0]; # le fichier xml en entrée
my %tag =(
                'NOM','N',  

                'PUN','Y',
                'DET','D',
                'ADJ','A',
                'SEN','Y',
                'VER','V',
                'NAM','N',
                'PRP','S',
                'ADV','R',
                'KON','C',
                'NUM','M'
                        );
#====================================================================

open(Sortie,">Sortie-etiquetage.xml"); # le fichier en sortie

entete(); # l'entête du fichier xml résultat

$ENV{'PATH'} = "./bin;";
system("set $ENV{'PATH'}");
open (FICH ,"<$texte");  # le fichier en entrée
open(FS,"> tagger.txt");
open(OFILE,">fichfen.txt");

while ($ligne=<FICH>)
  {   
   if ( $ligne=~/<NOM>([^<]*)<\/NOM><CONTENU>([^<]*)<\/CONTENU>/)
     {
        $nom=$1;          # récupérer le nom du fichier source
        $ch=$2;            # récupérer le contenu
           # remplacer les caractéres spéciaux
           
           
      while ($ch=~m/&#([0-9]+);/)
      {$ch=~s/&#([0-9]+);/chr($1)/ge;}
              
          

          
 
       
         $ch=~s/([^a-zA-Z0-9çàèéùîæêôÈÉÇÎâÂÙÛûúÚ])/\n$1\n/g;  # un mot par ligne
        
        open (FT,">".$i.".tmp.txt"); # mettre le résultat dans un fichier temporaire
     
          print FT $ch;
           close(FT);
 
      # lancer treetagger

     system("./bin/tree-tagger.exe -token -lemma -no-unknown ./lib/french.par $i.tmp.txt $i.tagger.txt");

     # le fichier résultat en   xml

     system("./treetagger2xml_mod.pl $i.tagger.txt");

     # ajouter le résultat de l'etiquetage au fichier xml final
      
     recuperer();


     traiter();   
       $i++;
     }
 }
fin(); # fin du fichier xml
close(OFILE);
close(FICH);
close(Sortie);
close(FS);
# appel des programmes de la boite à outil 3
system("perl bo3/source/trouve_Treetagger.pl tagger.txt patron-2.txt >liste_termes.txt");
# appel des programmes de la boite à outils 4
system ("perl bo4/source/patron2graphml.pl liste_termes.txt");

nettoyer();# supprimer les fichiers temporaires

#=======================================================
# générer le fichier texte étiqueté pour la BO3 et BO4
# et le fichier des fenêtres pour la BO5
#=====================================================
sub recuperer
{
 my @r;
open(FE,"<".$i.".tagger.txt");

while(<FE>){
             print FS;
      if (m/[" '<>]/) { next;}

             @r=split /\t/;
        chop($r[2]);
        $r[2]=~s/[\r\n]//;

        
         $r[1]=substr($r[1],0,3);
        $r[1]=~s/\s//g;
         
        if (exists($tag{$r[1]}))
         {
           
         print OFILE   "$r[2]_$tag{$r[1]}\n";
         }
        else
         {
          print OFILE   "$r[2]_$r[1]\n";
          }
        
 
}
print OFILE   "<FinFenetre/>\n";

close(FE);


}

#=====================================================================
#        ajouter le résultat de l'etiquetage au fichier xml final
#====================================================================
sub traiter
  {
      my $f="";
      my $lig;
      open(FH,"<".$i.".tagger.txt.xml");

  # lecture du fichier xml  temporaire    

      while (defined($lig=<FH>))
                      {
                       
                       $f=$f.$lig;
                       }

 # ajouter le résultat au fichier xml final en spécifiant le nom du fichier source



        $f=~s/<file>/<file>\n<name>$nom<\/name>\n/;
         $f=~s/<\/element>[^<]*<\/file>/<\/element>\n<\/file>/;
     print Sortie $f;
    
     close(FH);


   }
 

#=======================================
# Entête du fichier XML final
#=======================================
sub entete {
             print Sortie "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>\n";
             print Sortie "<PARCOURS>\n";
             print Sortie "<NOM>MAAFA ZAHIR</NOM>\n";
             print Sortie "<ETIQUETAGE>\n";
          }
#========================================
# fin du fichier xml final
#=======================================
sub fin {
          print Sortie "</ETIQUETAGE>\n";
    
          print Sortie "</PARCOURS>\n";
     }

#===========================================
# supprimer tous les fichiers temporaires
#===========================================
sub nettoyer
  {
  system '/bin/rm.exe *.tmp.txt';
  system '/bin/rm.exe  *.tagger.*';

  }