#/usr/bin/perl

<<DOC;
Nom : Olga Semenova
JANVIER 2005
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter, intègre le traitement par le programme Tree-tagger et produit en sortie un fichier contenant sur chaque 
ligne le nom du fichier et le résultat d'étiquetage :

 mot étiqueté par TreeTagger
DOC

#-----------------------------------------------------------
#le nom du répertoire passe en argument au programme
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="";

#----------------------------------------
# on ouvre le fichier de sortie
my $output1="SORTIE-TreeTagger.txt";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};

#----------------------------------------
#on lance le parcours récursif de l’arbre des fils
&parcoursarborescencefichiers($rep);        #recurse!

#----------------------------------------

# on intègre le contenu de la variable contenant le filtrage

print FILEOUT "$DUMPFULL1\n";

close(FILEOUT);
exit;

#----------------------------------------------
##Procedure de parcours
sub parcoursarborescencefichiers {
    my $path = shift(@_);

    #On ouvre le répertoire
    opendir(DIR, $path) or die "can't open $path: $!\n";

    #On « récupère » le  contenu du répertoire
    my @files = readdir(DIR);
    closedir(DIR);

    #Pour chacun des « éléments » contenus dans le répertoire,
    #on va vérifier son statut (répertoire -d ou fichier -f)
    foreach my $file (@files) {
        next if $file =~ /^\.\.?$/;

        #On commence par écrire  le chemin complet de l’ « élément »
        $file = $path."/".$file;

        #Si l’ « élément » est un répertoire (-d = directory) : on relance le parcours
        if (-$file) {
            &parcoursarborescencefichiers($file);        #recurse!
        }

        #Si l’ « élément » est un fichier (-f = file)  : on lance le traitement de filtrage
        #dont le résultat on imprime dans la variable $DUMPFULL1;

        #on verifie si "élément" est un fichier
        if (-$file) {

                #si oui, on l'ouvre
                #et on l"associe à un pointeur FIC et à une variable $file;
                open(FIC, $file);


                #Parcours du fichier associé au pointeur FIC;
                #Chaque ligne est stockée dans la variable $ligne;
                while ($ligne=<FIC>)

                {       #On vérifie si la ligne contient le motif ci-dessous;
                        #l'opérateur conditionnel =~ signifie "ressemble à";
                        #g = general, c'est à dire on cherche tout le texte;
                        #.* = on cherche n'importe quel caractère qui apparait
                        if ($ligne=~/<description>(.*)<\/description>/g) {

                        #vu que $1 est une variable par défault (elle désigne le contenu entre                         parentheses)
                        #on préfère la remplacer par une variable locale;
                        my $var=$1;

                $var=~s/\&[^ ]*;/'/g;                # remplacer des entités nommées représentant des apostrophes ou guillemets

                $var=~s/Toute.*connexion//g;
                $var=~s/Lisez.*information.//g;
                $var=~s/Retrouvez.*fr//g;                # supprimer des chaînes description "de service"
                $var=~s/L'actu.*ches//g;
                $var=~s/\(AFP\)//g;

                        #si la ligne contient le motif indiquée ci-dessus, on fait des                                  remplacement des caractères "mal affichés";

                        $var=~ s/&#38;#39;/'/g;
                        $var=~ s/&#38;#34;/"/g;
                        $var=~ s/&#234;/ê/g;
                        $var=~ s/é/é/g;
                        $var=~ s/ç/ç/g;
                        $var=~ s/è/è/g;
                        $var=~ s/Ã/à/g;
                        $var=~ s/à´/ô/g;
                        $var=~ s/&#233;/é/g;

                        if (!open (FILEOUTTEMP,">temp.txt")) { die "Pb a l'ouverture du fichier temp.txt"};

                        #on format le texte mot par ligne
                        $var=~ s/([^A-Za-zéèàëêâùïçôîÉÈÀÊÔÂÎÏËÙÇ'])/\n$1\n/g;
                        $var=~ s/\'/\'\n/g;
                        print FILEOUTTEMP $var;
                        close(FILEOUTTEMP);

#-----------------------------------------------------------
##Traitement par Tree-tagger:

                 #fichier d'entree ($input2): le fichier contenant le résultat des                               remplacements éffectués ci-dessus;
                 #fichier de sortie ($output2): le fichier contenant le résultat                                 du traitement par Tree-tagger;
                        $input2 = "temp.txt";
                        $output2 = "sortie_tt.txt";

                        #on lance le Tree-tagger en indiquant les options, fichier paramètre,                           fichier d'entrée et fichier de sortie
                        system("tree-tagger.exe -token -lemma -no-unknown french.par $input2 $output2");


#-----------------------------------------------------------

                         #on ouvre le fichier temporaire étiqueté et lemmatisé par Tree tagger
                        open (FILEINTEMP, $output2);

                        while ($ligne1= <FILEINTEMP>)
                        {
                                #l'opérateur !~ (ne ressemble pas à)
                                if ($ligne1!~/\ô\¯\:\.\ô\¯\:\.\./) {
            # Remplacement des guillemets par <![CDATA["]]> (évite erreur d'interprétation XML)
            $ligne1=~s/\"/<![CDATA[\"]]>/g;
            $ligne1=~s/(<unknown>)/unknown/g;




# Suppression des caractères générés par TreeTagger
  $ligne1=~s/(.*°I..)//g;





                        $DUMPFULL1 .= $ligne1;
                                }

                        }


                        }
                }

                 close(FILEINTEMP, $output2);

            print $i++,"\n";
        }
    }
}
#----------------------------------------------