#===================================================================
#                                                          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  ====================
#=========================== caracteres spéciaux ================================
my $cs="ƒŒœµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöùúûüýþÿŸ";
#=========================================================================

my $i=0;
my $ch;                     # contient le texte a étiqueter à chaque itération
my $nom;                   # nom du fichier xml source du texte
my $ligne;
my $texte=$ARGV[0]; # le fichier xml en entrée

#============================================================


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

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

         
         $ch=~s/([^a-zA-Z0-9$cs])/\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

     traiter();   
       $i++;
     }
 }
fin(); # fin du fichier xml
close(FICH);
close(Sortie);
nettoyer();# supprimer les fichiers temporaires


#=====================================================================
#                                      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/;
     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.*';

  }