#!/usr/bin/perl
#use strict;
use utf8;
binmode STDOUT, ':utf8';
use Getopt::Std;
use Algorithm::NaiveBayes;
#-----------------------------------------------------------
<<DOC; 
Votre Nom : SF/JMD
 Date : "31/03/2021"
 usage : perl Load-BAO4-classif-fil.pl REPFIL REPTRAIN REPTREETAGGER [stoplist.fr-etendue-utf8.txt] 
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter.
 Le programme catégorise chaque fil RSS suivant les rubriques de REPTRAIN
 REPFIL : arborescence RSS
 REPTRAIN : dossier contenant les rubriques pour l\'apprentissage
 REPTREETAGGER : dossier contenant les ressources treetagger (ici ce sont les ressources TT pour win32 sont qui utilisées: tree-tagger.exe french-utf8.par tokenise-utf8.pl)
 stoplist.fr-etendue-utf8.txt : fichier stopliste
DOC
#-----------------------------------------------------------
my $VERSION="1.0";
my $CMD="ClassRss";
my $MODIFIED="31/03/2021";
my $HELP="___________________________________________________________________________

$CMD $VERSION (c) Serge Fleury, PLURITAL $MODIFIED
___________________________________________________________________________

OBJECTIF : classifier les fils RSS

SYNTAXE :   $CMD [options] <REPFIL> <REPTRAIN> <REPTREETAGGER> [fichier-stop-list] 

 REPFIL : arborescence RSS
 REPTRAIN : dossier contenant les rubriques pour l\'apprentissage
 REPTREETAGGER : dossier contenant les ressources treetagger (ici ce sont les ressources TT pour win32 sont qui utilisées: tree-tagger.exe french-utf8.par tokenise-utf8.pl)
 stoplist.fr-etendue-utf8.txt : fichier stopliste

OPTIONS :
  -h        imprime le mode d emploi de ce programme
  -e        travail sur les lemmes apres etiquetage avec treetagger
  -c        travail sur les caracteres

EXEMPLES:
    perl Load-BAO4-classif-fil.pl 2019-1jour categorie-2018-sf ../distrib-treetagger stoplist.fr-etendue-utf8.txt

___________________________________________________________________________


";
###########################################################################
# parse command line
###########################################################################
getopts('hec');
if (defined($opt_h)) {
  print STDERR "$HELP";
  exit(1);
}
my $tagger=0;
my $splitChar=0;
# on vérifie si treetagger est invoqué
if (defined($opt_e)) {
  print STDERR "\nmode \"tagger\" actif\n";
  $tagger=1;
  $splitChar=0;
}
if (defined($opt_c)) {
  print STDERR "\nmode \"char\" actif\n";
  $tagger=0;
  $splitChar=1;
}
print "TAGGER : $tagger SPLITCHAR : $splitChar\n";
###########################################################################
# recup REPFIL dir
###########################################################################
my $dirFilRSS="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
my $i=0;
###########################################################################
# recup REPTRAIN dir
###########################################################################
my $repTrain=$ARGV[1];
$repTrain=~ s/[\/]$//;
print "REP TRAIN : $repTrain\n";
###########################################################################
# recup TREETAGGER dir
###########################################################################
my $distribTreetagger=$ARGV[2];
$distribTreetagger=~ s/[\/]$//;
print "TT dir : $distribTreetagger\n";
###########################################################################
# verif STOPLIST
###########################################################################
# Test si stoplist
my %stopList=();
if ($ARGV[3] ne "") {
    open my $stopF, "<:encoding(utf-8)", $ARGV[3] or die "$!";
    while (my $ligne=<$stopF>) {
	chomp $ligne;
	$ligne=~s/\r//;
	$stopList{lc($ligne)}++;
	#print "stop : <$ligne> \n";
    }
    close $stopF;
}
###########################################################################
# Select Rubrique
###########################################################################
my ($rubUne,$rubInternational,$rubEurope,$rubSociete,$rubIdees,$rubEconomie,$rubActualitemedias,$rubSport,$rubPlanete,$rubCulture,$rubLivres,$rubCinema,$rubVoyage,$rubTechnologies,$rubPolitique,$rubSciences)=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
my $nombretotalderubrique2check=0;
#------------------------------------------------
my @listeLabelRSS2check=();
my $labelRSS2check="";
print "Traitement de la rubrique Une (o/n) : ";
my $rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubUne=1;push(@listeLabelRSS2check,"3208");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique International (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubInternational=1;push(@listeLabelRSS2check,"3210");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Europe (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubEurope=1;push(@listeLabelRSS2check,"3214");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Societe (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubSociete=1;push(@listeLabelRSS2check,"3224");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Idees (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubIdees=1;push(@listeLabelRSS2check,"3232");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Economie (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubEconomie=1;push(@listeLabelRSS2check,"3234");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique ActualitéMedias (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubActualitemedias=1;push(@listeLabelRSS2check,"3236");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Sport (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubSport=1;push(@listeLabelRSS2check,"3242");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Planete (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubPlanete=1;push(@listeLabelRSS2check,"3244");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Culture (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubCulture=1;push(@listeLabelRSS2check,"3246");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Livres (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubLivres=1;push(@listeLabelRSS2check,"3260");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Cinema (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubCinema=1;push(@listeLabelRSS2check,"3476");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Voyage (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubVoyage=1;push(@listeLabelRSS2check,"3546");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Technologie (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubTechnologies=1;push(@listeLabelRSS2check,"651865");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Politique (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubPolitique=1;push(@listeLabelRSS2check,"823353");$nombretotalderubrique2check++};
#------------------------------------------------
print "Traitement de la rubrique Sciences (o/n) : ";
$rep=<STDIN>;
chomp($rep);
if ($rep eq "o") {$rubSciences=1;push(@listeLabelRSS2check,"sciences");$nombretotalderubrique2check++};
#------------------------------------------------
if ($nombretotalderubrique2check == 0) {print "Aucune rubrique sélectionnée !!!\n";exit};
$labelRSS2check=join("|",@listeLabelRSS2check);
###########################################################################
# Param divers
###########################################################################
#----------------------------------------
# Phase 0 : correspondance FIL RUBRIQUE
my %dicoCorrespondanceFilRubrique=(
    "0,2-3208,1-0,0" => "une" ,
    "0,2-3210,1-0,0" => "international",
    "0,2-3214,1-0,0" => "europe",
    "0,2-3224,1-0,0" => "societe",
    "0,2-3232,1-0,0" => "idees",
    "0,2-3234,1-0,0" => "economie",
    "0,2-3236,1-0,0" => "actualitemedias",
    "0,2-3242,1-0,0" => "sport",
    "0,2-3244,1-0,0" => "planete",
    "0,2-3246,1-0,0" => "culture",
    "0,2-3260,1-0,0" => "livres",
    "0,2-3476,1-0,0" => "cinema",
    "0,2-3546,1-0,0" => "voyage",
    "0,2-651865,1-0,0" => "technologies",
    "0,57-0,64-823353,0" => "politique",
    "env_sciences" => "sciences",
    );
my %dicoCorrespondanceFilRubriqueOK=(
    "0,2-3208,1-0,0" => [0,0] ,
    "0,2-3210,1-0,0" => [0,0] ,
    "0,2-3214,1-0,0" => [0,0] ,
    "0,2-3224,1-0,0" => [0,0] ,
    "0,2-3232,1-0,0" => [0,0] ,
    "0,2-3234,1-0,0" => [0,0] ,
    "0,2-3236,1-0,0" => [0,0] ,
    "0,2-3242,1-0,0" => [0,0] ,
    "0,2-3244,1-0,0" => [0,0] ,
    "0,2-3246,1-0,0" => [0,0] ,
    "0,2-3260,1-0,0" => [0,0] ,
    "0,2-3476,1-0,0" => [0,0] ,
    "0,2-3546,1-0,0" => [0,0] ,
    "0,2-651865,1-0,0" => [0,0] ,
    "0,57-0,64-823353,0" => [0,0] ,
    "env_sciences" => [0,0] ,
    );
my %dicoCorrespondanceFilRubriqueNOTOK=();
###########################################################################
# Phase 1 : entraînement sur REPTRAIN
###########################################################################
open my $trace, ">:encoding(utf-8)", "logParcours.txt" or die "$!";
print $trace "-------------------- PHASE1 : entraînement...------------------------\n";
print $trace "-------------------- Lecture des catégories... dans $repTrain ------------------------\n";
my $categorizer = Algorithm::NaiveBayes->new;
#----------------------------------------
if ($rubActualitemedias == 1) {
    if (-e "./$repTrain/actualite-medias.txt") {
	my %actualitemedias=splitFile("./$repTrain/actualite-medias.txt");
	print $trace "-------------------- Fin Lecture actualitemedias ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%actualitemedias,
	    label => 'actualitemedias');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/actualite-medias.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubCinema == 1) {
    if (-e "./$repTrain/cinema.txt") {
	my %cinema=splitFile("./$repTrain/cinema.txt");
	print $trace "-------------------- Fin Lecture cinema ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%cinema,
	    label => 'cinema');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/cinema.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubCulture == 1) {
    if (-e "./$repTrain/culture.txt") {
	my %culture=splitFile("./$repTrain/culture.txt");
	print $trace "-------------------- Fin Lecture culture ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%culture,
	    label => 'culture');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/culture.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubEconomie == 1) {
    if (-e "./$repTrain/economie.txt") {
	my %economie=splitFile("./$repTrain/economie.txt");
	print $trace "-------------------- Fin Lecture economie ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%economie,
	    label => 'economie');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/economie.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubEurope == 1) {
    if (-e "./$repTrain/europe.txt") {
	my %europe=splitFile("./$repTrain/europe.txt");
	print $trace "-------------------- Fin Lecture europe ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%europe,
	    label => 'europe');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/europe.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubIdees == 1) {
    if (-e "./$repTrain/idees.txt") {
	my %idees=splitFile("./$repTrain/idees.txt");
	print $trace "-------------------- Fin Lecture idees ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%idees,
	    label => 'idees');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/idees.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubInternational == 1) {
    if (-e "./$repTrain/international.txt") {
	my %international=splitFile("./$repTrain/international.txt");
	print $trace "-------------------- Fin Lecture international ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%international,
	    label => 'international');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/international.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubLivres == 1) {
    if (-e "./$repTrain/livres.txt") {
	my %livres=splitFile("./$repTrain/livres.txt");
	print $trace "-------------------- Fin Lecture livres ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%livres,
	    label => 'livres');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/livres.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubPlanete == 1) {
    if (-e "./$repTrain/planete.txt") {
	my %planete=splitFile("./$repTrain/planete.txt");
	print $trace "-------------------- Fin Lecture planete ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%planete,
	    label => 'planete');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/planete.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubPolitique == 1) {
    if (-e "./$repTrain/politique.txt") {
	my %politique=splitFile("./$repTrain/politique.txt");
	print $trace "-------------------- Fin Lecture politique ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%politique,
	    label => 'politique');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/politique.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubSciences == 1) {
    if (-e "./$repTrain/sciences.txt") {
	my %sciences=splitFile("./$repTrain/sciences.txt");
	print $trace "-------------------- Fin Lecture sciences ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%sciences,
	    label => 'sciences');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/sciences.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubSociete == 1) {
    if (-e "./$repTrain/societe.txt") {
	my %societe=splitFile("./$repTrain/societe.txt");
	print $trace "-------------------- Fin Lecture societe ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%societe,
	    label => 'societe');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/societe.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubSport == 1) {
    if (-e "./$repTrain/sport.txt") {
	my %sport=splitFile("./$repTrain/sport.txt");
	print $trace "-------------------- Fin Lecture sport ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%sport,
	    label => 'sport');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/sport.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubTechnologies == 1) {
    if (-e "./$repTrain/technologies.txt") {
	my %technologies=splitFile("./$repTrain/technologies.txt");
	print $trace "-------------------- Fin Lecture technologies ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%technologies,
	    label => 'technologies');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/technologies.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubUne == 1) {
    if (-e "./$repTrain/une.txt") {
	my %une=splitFile("./$repTrain/une.txt");
	print $trace "-------------------- Fin Lecture une ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%une,
	    label => 'une');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/une.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
if ($rubVoyage == 1) {
    if (-e "./$repTrain/voyage.txt") {
	my %voyage=splitFile("./$repTrain/voyage.txt");
	print $trace "-------------------- Fin Lecture voyage ...------------------------\n";
	$categorizer->add_instance(
	    attributes => \%voyage,
	    label => 'voyage');
    }
    else {
	print "\n--------------------------------\nPB : Fichier d'entraînement absent dans ./$repTrain/voyage.txt \n--------------------------------\n";
	exit;
    }
}
#----------------------------------------
print $trace "-------------------- Fin Lecture catégories ...------------------------\n";
$categorizer->train;
###########################################################################
# Phase 2 : on passe au parcours de l'arborescence
# chaque fil sera catégorisé versus sa catégorie "par défaut"
###########################################################################
print $trace "-------------------- PHASE2 : parcours arborescence...------------------------\n";
my $nbFileRss=0;
my $filrubriqueOK=0;
&parcoursarborescencefichiers($dirFilRSS);	#recurse!
print $trace "--------------------------------------------\n";
print $trace "\nnbFil, rubriques attribuées OK\n";
foreach my $rub (keys %dicoCorrespondanceFilRubriqueOK) {
    print $trace "@{$dicoCorrespondanceFilRubriqueOK{$rub}}	$dicoCorrespondanceFilRubrique{$rub}\n";
}
print $trace "\nNb Fil lu : $nbFileRss \n";
print $trace "Nb Attribution rubrique OK : $filrubriqueOK\n";
print $trace "--------------------------------------------\n";
print $trace "\nnb Rubriques attribuées pas OK\n";
foreach my $rub (keys %dicoCorrespondanceFilRubriqueNOTOK) {
    my $dicoMalAttribue=$dicoCorrespondanceFilRubriqueNOTOK{$rub};
    print $trace "Liste des rubriques attribuées pour : $dicoCorrespondanceFilRubrique{$rub} \n";
    foreach my $rub2 (keys %$dicoMalAttribue) {
	print $trace "	$dicoMalAttribue->{$rub2}	$rub2\n";
    }
}
print "\nnbFil, rubriques attribuées OK\n";
foreach my $rub (keys %dicoCorrespondanceFilRubriqueOK) {
    print "@{$dicoCorrespondanceFilRubriqueOK{$rub}}	$dicoCorrespondanceFilRubrique{$rub}\n";
}
print "\nnb Rubriques attribuées pas OK\n";
foreach my $rub (keys %dicoCorrespondanceFilRubriqueNOTOK) {
    my $dicoMalAttribue=$dicoCorrespondanceFilRubriqueNOTOK{$rub};
    print "Liste des rubriques attribuées pour : $dicoCorrespondanceFilRubrique{$rub} \n";
    foreach my $rub2 (keys %$dicoMalAttribue) {
	print "	$dicoMalAttribue->{$rub2}	$rub2\n";
    }
}

print "\nNb Fil lu : $nbFileRss \n";
print "Nb Attribution rubrique OK : $filrubriqueOK\n";
print "voir logParcours.txt \n";
print "--------------------------------------------\n";
close($trace);
exit;
###########################################################################
# FIN
###########################################################################
sub splitFile {
    my %dico=();
    if ($tagger == 1) {
	print $trace "-------------------- Lecture et étiquetage de $_[0] ------------------------\n";
	open my $file, "<:encoding(utf-8)", "$_[0]" or die "$!";
	my $textetotag="";
	while (my $ligne=<$file>) {
	    chomp($ligne);
	    $ligne=~s/\r//;
	    $textetotag .= $ligne. " ";
	}
	close $file;
	$textetotag = &etiquetageTT($textetotag);	
	$textetotag=~s/[ ,;’'~\|\&\#\@\=`\­\–\-\.\"\?!%\*\$\(\)\[\]“”…{}_:\+«»§\/\t\s\n ]+/ /g;
	$textetotag=~s/^ +//g;
	$textetotag=~s/ +$//g;
	#print "<$textetotag>\n";
	#my $rep=<STDIN>;
	my @liste = split(/ +/,$textetotag);
	#print $trace "VERIF <@liste>\n";
	foreach my $token (@liste) {
	    my $token2=lc($token);
	    #print $trace "$token <$token2>\n";	
	    if (!(exists($stopList{$token2}))) {
		$dico{$token2}++;
	    }
	};
    }
    else {
	print $trace "-------------------- Lecture $_[0] ------------------------\n";
	open my $file, "<:encoding(utf-8)", "$_[0]" or die "$!";
	while (my $ligne=<$file>) {
	    #print $ligne;
	    chomp $ligne;
	    $ligne=~s/[ ,;’'~\|\&\#\@\=`\­\–\-\.\"\?!%\*\$\(\)\[\]“”…{}_:\+«»§\/\t\s ]+/ /g;
	    $ligne=~s/^ +//g;
	    $ligne=~s/ +$//g;
	    my @liste=split(/ +/, $ligne);
	    if ($splitChar == 0) {
		foreach my $token (@liste) {
		    my $token2=lc($token);
		    if (!(exists($stopList{$token2}))) {
			$dico{$token2}++;
		    }
		}
	    }
	    else {
		foreach my $token (@liste) {
		    my @char = split(//,$token);
		    foreach my $char (@char) {
			my $char2=lc($char);
			$dico{$char2}++;
		    }
		}
		
	    }
	}
	close $file;
    }
    # Creation du dico de chaque rubrique
    open my $dico, ">:encoding(utf-8)", "$_[0].dico" or die "$!";
    foreach my $word (sort { $dico{$b} <=> $dico{$a} } keys %dico) {
	print $dico "<$word>	$dico{$word}\n";
	#print $trace "<$word>	$dico{$word}\n";
    }
    close $dico;
    return %dico;
}
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    print $trace $path,"\n";
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
	next if $file =~ /^\.\.?$/;
	my $filename=$file;
	$file = $path."/".$file;
	if (-d $file) {
	    print $trace "on entre dans $file \n";
	    &parcoursarborescencefichiers($file);	#recurse!
	}
	if (-f $file) {
	    if (($file=~/.+\.xml$/) and ($file!~/fil/) and ($file=~/($labelRSS2check)/)) {	
		my $labelRUB=$1; 
		print $trace $i++," : $file ==> $labelRUB \n";
		$nbFileRss++;
		$filename=~s/\.xml$//;
		open my $FIC,"<:encoding(utf8)",$file or die "$!";
		$/=undef;     #ou $\=""
		my $tout_le_texte=<$FIC>;
		close $FIC;
		$/="\n";
		my $textefil="";
		my %sentence=();
		while ($tout_le_texte =~ /<item>.*?<title>(.+?)<\/title>.+?<description>(.+?)<\/description>/sg) {
		    my $titre = $1;
		    my $description = $2;
		    my ($titrenettoye,$descriptionnettoye) = &nettoyage($titre,$description);
		    $textefil.= $titrenettoye." ";
		    $textefil.= $descriptionnettoye." ";
		}
		
		#--------------------------------------------------------------
		if ($tagger == 1) {
		    $textefil = &etiquetageTT($textefil);	
		}					
		$textefil=~s/[ ,;’'~\|\&\#\@\=`\­\–\-\.\"\?!%\*\$\(\)\[\]“”…{}_:\+«»§\/\t\s\n ]+/ /g;
		$textefil=~s/^ +//g;
		$textefil=~s/ +$//g;
		#print "<$textefil>\n";
		#my $rep=<STDIN>;
		my @liste = split(/ +/,$textefil);
		#print $trace "VERIF <@liste>\n";
		if ($splitChar == 0) {
		    foreach my $token (@liste) {
			my $token2=lc($token);
			#print $trace "$token <$token2>\n";	
			if (!(exists($stopList{$token2}))) {
			    $sentence{$token2}++;
			}
		    }	
		}
		else {
		    foreach my $token (@liste) {
			my @char = split(//,$token);
			foreach my $char (@char) {
			    my $char2=lc($char);
			    $sentence{$char2}++;
			    #print  "$token <$token2> $sentence{$char2}\n";	
			}
		    }
		    
		}
		#--------------------------------------------------------------
		open my $dico, ">:encoding(utf-8)", "$filename.dico" or die "$!";
		foreach my $word (sort { $sentence{$b} <=> $sentence{$a} } keys %sentence) {
		    print $dico "<$word>	$sentence{$word}\n";
		}
		close $dico;
		my $probability = $categorizer->predict(attributes => \%sentence);
		print $trace "probabilité de la catégorie pour $filename  :\n";
		my $max=0;
		my $rubProbable="";
		foreach my $k (sort (keys(%$probability))){
		    print $trace $probability->{$k}." ".$k;
		    if ($probability->{$k} >= $max) {
			$max = $probability->{$k};
			$rubProbable=$k;
		    }
		    print $trace "\n";
		}
		print $trace "--------------------------------------------\n";
		print $trace "Rubrique attendue : $dicoCorrespondanceFilRubrique{$filename} \n";
		print $trace "Rubrique probable : $rubProbable | P = $max \n";
		print $trace "--------------------------------------------\n";
		$dicoCorrespondanceFilRubriqueOK{$filename}->[0]++;
		if ($dicoCorrespondanceFilRubrique{$filename} eq $rubProbable) {
		    $filrubriqueOK++;
		    $dicoCorrespondanceFilRubriqueOK{$filename}->[1]++;
		}
		else {
		    $dicoCorrespondanceFilRubriqueNOTOK{$filename}->{$rubProbable}++;
		}
		
	    }
	}
    }
}
#----------------------------------------------
sub nettoyage {
    #my $titre=shift(@_); autre solution en vidant la liste des arguments du programmes...
    #my $description=shift(@_);
    my $titre = $_[0];
    my $description = $_[1];
    $titre=~s/^<!\[CDATA\[//;
    $titre=~s/\]\]>$//;
    $description=~s/^<!\[CDATA\[//;
    $description=~s/\]\]>$//;
    $description=~s/&lt;.+?&gt;//g;
    $description=~s/&#38;#39;/'/g;
    $description=~s/&#38;#34;/"/g;
    $titre=~s/&lt;.+?&gt;//g;
    $titre=~s/&#38;#39;/'/g;
    $titre=~s/&#38;#34;/"/g;
    $titre=~s/$/\./g;
    $titre=~s/\.+$/\./g;
    return $titre,$description;
}
#----------------------------------------------
sub etiquetageTT {
    my $var1 = shift(@_);
     if ((-e "$distribTreetagger/tokenise-utf8.pl") and (-e "$distribTreetagger/tree-tagger.exe") and (-e "$distribTreetagger/french-utf8.par")) {
    }
    else {
	print "\n--------------------------------\nPB : Ressource(s) TT absente(s) \n--------------------------------\n";
	exit;
    }
    open my $out, ">:encoding(utf8)", "titre_tmp.txt" or die "$!";
    print $out $var1;
    close $out;
    system("perl $distribTreetagger/tokenise-utf8.pl -f titre_tmp.txt | $distribTreetagger/tree-tagger.exe -lemma -token -no-unknown $distribTreetagger/french-utf8.par > titre_tmp_etiq.txt");
    open my $fic, "<:encoding(utf8)","titre_tmp_etiq.txt" or die "$!";
    my $titre_retour="";
    while (my $ligne=<$fic>) {
	chomp $ligne;
	$ligne=~s/\r//;
	my @LIGNE=split(/\t/,$ligne);
	$titre_retour.= " ".$LIGNE[2];
    }
    close($fic);
    return $titre_retour;
}
#----------------------------------------------

