#/usr/bin/perl
use Unicode::String qw(utf8); ##On charge le module unicode::string
<<DOC; #introduit dans un fichier perl de la documentation intégree au programme
Votre Nom : Leidiana Martins & Arezki Sadoune & Latifa faiz
JANVIER 2011
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter
 
 #le programme construit en sortie plusieurs fichiers (dans un seul folder)contenant le résultat du filtrage selon l'usage qui en sera fait :
 #- un fichier sortie structuré au format XML :
##- un fichier non structuré au format texte ;
##- un fichier texte pour la sortie treetager
##- la version xml de la sortie treetager
####- Autant de fichiers d'extraction au format texte que de patrons (de lignes) présents dans le fichier 'patterns'.


Remarque : la construction de ce programme s'appuie sur les scripts donnés en cours : parcours-arborescence-fichiers.pl, filtreur.pl & nettoyeur.pl

DOC
#-----------------------------------------------------------
#récupère le chemin du répertoire à parcourir
my $rep="$ARGV[0]"; 
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//; 

# Initialisation des différentes variables 
my $DUMPXML=""; 
my $DUMPTXT="";
my $DUMPTMP=""; 
# numéro & nom de la rubrique, date de l'article traité
my $num="";
my $rubrique="";
my $date="";

my %dictionnairedesrubriques=();


# dialogue avec l'utilisateur
print "\nBonjour, vous êtes sur le nettoyeur de fils RSS du journal \"Le Monde\" !\n\n";
print "Entrez l'identifiant de la rubrique a traiter ou * si vous voulez toutes les rubriques : \n";
print "0 : A la une\t\t\t\t8 : Medias\n
1 : International\t\t\t9 : Rendez-vous\n
2 : Europe\t\t\t\t10 : Sports\n
3 : Livres\t\t\t\t11 : Opinions\n
4 : Cinema\t\t\t\t12 : Planete\n
5 : Technologies\t\t\t13 : Voyages\n
6 : Politique\t\t\t14 : Culture\n
7 : Economie\t\t\t15 : Societe\n
ALL:* \n\n
Votre choix : ";

# Récupération de l'identifiant de la rubrique tapé par l'utilisateur
$id = <STDIN>;

# Suppression du dernier caractère de retour à la ligne s'il y en a un
chomp($id);

 #Choix de la rubrique ou de toutes les rubriques
if ($id eq 0) {$num="3208";;$rubrique="a_la_une";}  #lê-se se $id equivale a 0
elsif ($id eq 1) {$num="3210";$rubrique="international";}
elsif ($id eq 2) {$num="3214";$rubrique="europe";}
elsif ($id eq 3) {$num="3260";$rubrique="livres";}
elsif ($id eq 4) {$num="3476";$rubrique="cinema";}
elsif ($id eq 5) {$num="651865";$rubrique="technologie";}
elsif ($id eq 6) {$num="823353";$rubrique="politique";}
elsif ($id eq 7) {$num="3234";$rubrique="economie";}
elsif ($id eq 8) {$num="3236";$rubrique="medias";}
elsif ($id eq 9) {$num="3238";$rubrique="rendez-vous";}
elsif ($id eq 10) {$num="3242";$rubrique="sport";}
elsif ($id eq 11) {$num="3232";$rubrique="opinions";}
elsif ($id eq 12) {$num="32344";$rubrique="planete";}
elsif ($id eq 13) {$num="3246";$rubrique="voyages";}
elsif ($id eq 14) {$num="3546";$rubrique="culture";}
elsif ($id eq 15) {$num="3224";$rubrique="societe";}
elsif ($id eq "*") {$num="ALL";$rubrique="toutes_les_rubriques";}
else { print "Je n'ai pas compris, veuillez indiquer la rubrique à traiter\n"; }  
#-----------------------------
# stockage des chemins et noms des différentes sorties
#création d'un dossier pour les sorties
my $folder="SORTIES_REGEX_".$rubrique;
@args = ("mkdir", "$folder");
system(@args) == 0 or die "system @args failed: $?";

my $output1_xml=$folder."/SORTIE_".$rubrique.".xml";
my $output2_txt=$folder."/SORTIE_".$rubrique.".txt";
my $outputtmp=$folder."/SORTIE_txtbaliseTreeTagger_".$rubrique.".txt";     ###SORTIES_REGEX_".$rubrique."/

# ouverture des fichiers de sortie
my $encodagesortie="utf-8";
if (!open(OUTXML,">:encoding($encodagesortie)",$output1_xml)) { die "Pb a l'ouverture du fichier $output1_xml.xml"};
if (!open(OUTTXT,">:encoding($encodagesortie)",$output2_txt)) { die "Pb a l'ouverture du fichier $output2_txt.txt"};
if (!open (TMP,">:encoding(iso-8859-1)",$outputtmp)) { die "Pb a l'ouverture du fichier $outputtmp"};
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse! procédure qui parcourt l'arborescence du fichier. début du parcour d'arborescence du fichier

#----------------------------------------
# Creation du fichier XML:les premières lignes de mon fichier
print OUTXML "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; 
print OUTXML "<PARCOURS>\n";
print OUTXML "<NOM>Sadoune &amp Martins &amp Faiz</NOM>\n";
print OUTXML "<FILTRAGE rubrique=\"".$rubrique."\" identifiant=\"$num\">\n".$DUMPXML."</FILTRAGE>\n";
print OUTXML "</PARCOURS>\n";
close(OUTXML);

# Creation du fichier TXT
print OUTTXT "$DUMPTXT";
close (OUTTXT);
# création de la sortie temporaire pour TreeTagger
print TMP "<$rubrique>\n\n";
print TMP "$DUMPTMP";
print TMP "</$rubrique>\n\n";
close(TMP);

#On lance la procédure d'étiquetage treetagger
&lancetreetagger;
#On lance la procédure d'étiquetage treetagger
&extrairePatrons;
## Fin du programme
exit;

## Et on définit les procédures ###
#----------------------------------------------
# Procédure parcoursarborescencefichiers
sub parcoursarborescencefichiers { #recupération du nom de paramètre passee en procedure
    my $path = shift(@_); #argument passé en procedure, dans la variable $path, on a pour valeur, la valeur 2008
    opendir(DIR, $path) or die "can't open $path: $!\n"; # on ouvre le répertoire par la commande opendir(pointeur de répertoire (mot clé pour faire référence au dossier physique caché derrière la variable) et nom de la variable. fonction die permet d'interrompre l'execution d'un programme et envoie à l'ecran le message d'erreur (idem que or exit)
    my @files = readdir(DIR); #commande readdir lit le contenu d'un répertoire et prend comme argument un pointeur de répertoire. la commande readdir renvoie comme valeur une liste des éléments constitutifs du répertoire (dossiers) fonction readdir renvoie aux fichiers, répertoire courant et répertoire parent
    closedir(DIR);
    
    foreach my $file (@files) { #parcourt une liste @files, prend chacun des éléments constitutifs du répertoire. on applique des traitements différents en fonction des objectifs
	next if $file =~ /^\.\.?$/; # 
	my $nomdefichier=$file;
	$file = $path."/".$file; #$file (fichier jan) la ressource est elle un répertoire ou un fichier?
	
	if (-d $file) { #pour savoir si ressource issue de la liste des fichiers de telle année est un répertoire. # -d $file sera vrai si é um rep e falso se é um fichier
	    &parcoursarborescencefichiers($file);	
	    #recurse! mis en oeuvre d'un mecanisme de récursivité jusqu'à epuisement; 
	    #ex 2008/jan, si répertoire la procedure est relancer ex 2008/jan/1, 
	    #quand on arrive sur des fichiers, arrêt de la récursivité
	}
	if ((-f $file) && ($file=~/.xml$/) && ($nomdefichier!~/^fil/)) {
		my $file2traite="";
		# on initie une variable a vide 
		if ($num eq "ALL") { #traitement de tous le fichiers
			$file2traite=$file;
		}
		else {
			if ($file=~/0,2-$num,1-0,0\.xml$/) {#traitement d'une rubrique en particulier
				$file2traite=$file;
			}
		}
		if ($file2traite ne "") {
		    #print "contenu de $file : \n"; #lecture de $file
		    open(FILE, $file); 
		    my $firstline=<FILE>;
		    $firstline=~/encoding=['"]([^'"]+)['"]/;
		    my $encodage=$1;
		    close(FILE);
		    open(FILE,"<:encoding($encodage)", $file); 
		    my $texte="";  # $texte, jinicialize vide,
		    while (my $ligne=<FILE>) {
			# # je lis le flux integrelement,
			#print $ligne;
			$ligne =~ s/\n//g; # chaq fois q je la lis,jenleve le retour à linge et jeconcatee
			$texte .= $ligne; #ici jconcatene la ligne q jviens d lire
			#if ($ligne=~/<title>(.+)<\/title>/) {
			#print "TITRE : $1 \n";  Ces 2 lignes étaient avant
		    }
		    $texte =~ s/> *</></g; # suprimer tt c qy a comme blanc entre les chevrons fermants et chevrons ouvrants et jremplace par ><
		    $texte=~/<pubDate>([^<]+)<\/pubDate>/; # jcherche la balise pubdate et jmemorize le contenu d cette balise dns $date
		    my $date=$1;
		    print $date,"\n";
		    if (uc($encodage) ne "UTF-8") {utf8($date);} # si cest pa dutf8,faut q jtransforme(uc=majuscule)
		    $DUMPXML.="<date>".$date."</date>\n"; # jmets la date dans des balises dates
		    $DUMPXML.="<items>\n"; # texte de balises items
		    # extraction de contenu txtuel, utilisant regex. (.+?)=qq ch. .+?=qq ch. /g tant q tu peux trouver ce modele dans la ligne,tu le fais
		    while ($texte =~ /<item><title>([^<]+)<\/title>.+?<description>([^<]+)<\/description>/gi) {
			my $titre=$1; # contenu txtuelle de title
			my $resume=$2; # contenu txtuelle de resume	
			if (uc($encodage) ne "UTF-8") {utf8($titre);utf8($resume);}
			$titre = &nettoietexte($titre); # suprimer du contenu txtuelle les scories q peuvent apparaitre,resultat renvoyé à $titre
			$resume = &nettoietexte($resume);
			
			if (!(exists($dictionnairedesrubriques{$resume}))) {
			
				$DUMPTXT.="Titre : $titre \n";
				$DUMPTXT.="Resume : $resume \n";;
				$DUMPXML.="<item><title>$titre</title><abstract>$resume</abstract></item>\n";
				$DUMPTMP.="<BLOC> $titre </BLOC> <BLOC> $resume\n </BLOC>";
				$dictionnairedesrubriques{$resume}++;
		    }
			else {
			    $dictionnairedesrubriques{$resume}++;
			}
			
			}
		    $DUMPXML.="</items>\n</file>\n";
		    close(FILE);
		}
	    }
    }
}

#----------------------------------------------
sub nettoietexte {
    my $texte=shift; #prend une entrée un parametre et revoie une valeur de la chaine de caracteres nettoyé.fonction shift je vide le tableau des arguments passé à la procédure
    $texte =~ s/&lt;/</g;
    $texte =~ s/&gt;/>/g;
    $texte =~ s/<a href[^>]+>//g;
    $texte =~ s/<img[^>]+>//g;
    $texte =~ s/<\/a>//g;
    $texte =~ s/&#38;#39;/'/g;
    $texte =~ s/&#38;#34;/"/g;
    $texte =~ s/<[^>]+>//g;
    $texte =~s/&#39;/\'/g;
    $texte =~s/&#34;/\"/g;
    $texte =~s/&#233;/é/g;
    $texte =~s/&#234;/ê/g;
    $texte =~s/&amp;eacute;/é/g;
    $texte =~s/&amp;egrave;/è/g;
    $texte =~s/&amp;icirc;/\î/g;
    $texte =~s/&amp;ocirc;/\ô/g;
    $texte =~s/&amp;ccedil;/\ç/g;
    $texte =~s/&amp;agrave;/\à/g;
    $texte =~s/&#38;/&/g;
    $texte =~s/<.*$//g;
	$texte =~ s/&amp;|&#38;/&/g;
	$texte =~ s/&amp;|&#38;/&/g; 
	$texte =~ s/&apos;|&#39;/'/g; 
	$texte =~ s/&nbsp;|&#160;/? /g; 
	$texte =~ s/&shy;|&#173;/­/g; 
	$texte =~ s/&quot;|&#34;/"/g; 
	$texte =~ s/&laquo;|&#171;/«/g; 
	$texte =~ s/&raquo;|&#187;/»/g; 
	$texte =~ s/&lsaquo;|&#8249;/‹/g; 
	$texte =~ s/&rsaquo;|&#8250;/›/g; 
	$texte =~ s/&ldquo;|&#8220;/“/g; 
	$texte =~ s/&rdquo;|&#8221;/”/g; 
	$texte =~ s/&bdquo;|&#8222;/„/g; 
	$texte =~ s/&lsquo;|&#8216;/‘/g; 
	$texte =~ s/&bdquo;|&#8222;/„/g; 
	$texte =~ s/&rsquo;|&#8217;/’/g; 
	$texte =~ s/&sbquo;|&#8218;/‚/g; 
	$texte =~ s/&hellip;|&#8230;/…/g; 
	$texte =~ s/!|&#33;/!/g; 
	$texte =~ s/&iexcl;|&#161;/¡/g; 
	$texte =~ s/\?|&#63;/\?/g;
	$texte =~ s/\(|&#40;/\(/g; 
	$texte =~ s/\)|&#41;/\)/g; 
	$texte =~ s/\[|&#91;/\[/g; 
	$texte =~ s/]|&#93;/]/g; 
	$texte =~ s/{|&#123;/{/g; 
	$texte =~ s/}|&#125;/}/g; 
	$texte =~ s/&uml;|&#168;/¨/g; 
	$texte =~ s/&acute;|&#180;/´/g; 
	$texte =~ s/`|&#96;/`/g; 
	$texte =~ s/\^|&#94;/\^/g; 
	$texte =~ s/&circ;|&#710;/ˆ/g; 
	$texte =~ s/~|&#126;/~/g; 
	$texte =~ s/#|&#35;/#/g; 
	$texte =~ s/\*|&#42;/\*/g; 
	$texte =~ s/,|&#44;/,/g; 
	$texte =~ s/\.|&#46;/\./g; 
	$texte =~ s/:|&#58;/:/g; 
	$texte =~ s/;|&#59;/;/g; 
	$texte =~ s/&middot;|&#183;/·/g; 
	$texte =~ s/&bull;|&#8226;/•/g; 
	$texte =~ s/&macr;|&#175;/¯/g; 
	$texte =~ s/-|&#45;/-/g; 
	$texte =~ s/&ndash;|&#8211;/–/g; 
	$texte =~ s/&mdash;|&#8212;/—/g; 
	$texte =~ s/_|&#95;/_/g; 
	$texte =~ s/\||&#124;/\|/g; 
	$texte =~ s/&brvbar;|&#166;/¦/g; 
	$texte =~ s/&zwj;|&#8205;/?/g; 
	$texte =~ s/&dagger;|&#8224;/†/g; 
	$texte =~ s/&Dagger;|&#8225;/‡/g; 
	$texte =~ s/&Dagger;|&#8225;/‡/g; 
	$texte =~ s/&sect;|&#167;/§/g;
	$texte =~ s/&para;|&#182;/¶/g;
	$texte =~ s/&copy;|&#169;/©/g;
	$texte =~ s/&reg;|&#174;/®/g;
	$texte =~ s/&trade;|&#8482;/™/g;
	$texte =~ s/@|&#64;/@/g;
	$texte =~ s/\/|&#47;/\//g;
	$texte =~ s/\\|&#92;/\\/g;
	$texte =~ s/&loz;|&#9674;/?/g;
	$texte =~ s/&spades;|&#9824;/?/g;
	$texte =~ s/&clubs;|&#9827;/?/g;
	$texte =~ s/&hearts;|&#9829;/?/g;
	$texte =~ s/&diams;|&#9830;/?/g;
	$texte =~ s/&larr;|&#8592;/?/g;
	$texte =~ s/&uarr;|&#8593;/?/g;
	$texte =~ s/&rarr;|&#8594;/?/g;
	$texte =~ s/&darr;|&#8595;/?/g;
	$texte =~ s/&harr;|&#8596;/?/g;
	$texte =~ s/&aacute;|&#225;/á/g;
	$texte =~ s/&Aacute;|&#193;/Á/g;
	$texte =~ s/&acirc;|&#226;/â/g;
	$texte =~ s/&Acirc;|&#194;/Â/g;
	$texte =~ s/&agrave;|&#224;/à/g;
	$texte =~ s/&Agrave;|&#192;/À/g;
	$texte =~ s/&aring;|&#229;/å/g;
	$texte =~ s/&Aring;|&#197;/Å/g;
	$texte =~ s/&atilde;|&#227;/ã/g;
	$texte =~ s/&Atilde;|&#195;/Ã/g;
	$texte =~ s/&auml;|&#228;/ä/g;
	$texte =~ s/&Auml;|&#196;/Ä/g;
	$texte =~ s/&aelig;|&#230;/æ/g;
	$texte =~ s/&AElig;|&#198;/Æ/g;
	$texte =~ s/&ccedil;|&#231;/ç/g;
	$texte =~ s/&Ccedil;|&#199;/Ç/g;
	$texte =~ s/&eacute;|&#233;/é/g;
	$texte =~ s/&Eacute;|&#201;/É/g;
	$texte =~ s/&ecirc;|&#234;/ê/g;
	$texte =~ s/&Ecirc;|&#202;/Ê/g;
	$texte =~ s/&egrave;|&#232;/è/g;
	$texte =~ s/&Egrave;|&#200;/È/g;
	$texte =~ s/&euml;|&#235;/ë/g;
	$texte =~ s/&Euml;|&#203;/Ë/g;
	$texte =~ s/&iacute;|&#237;/í/g;
	$texte =~ s/&Iacute;|&#205;/Í/g;
	$texte =~ s/&icirc;|&#238;/î/g;
	$texte =~ s/&Icirc;|&#206;/Î/g;
	$texte =~ s/&igrave;|&#236;/ì/g;
	$texte =~ s/&Igrave;|&#204;/Ì/g;
	$texte =~ s/&iuml;|&#239;/ï/g;
	$texte =~ s/&Iuml;|&#207;/Ï/g;
	$texte =~ s/&ntilde;|&#241;/ñ/g;
	$texte =~ s/&Ntilde;|&#209;/Ñ/g;
	$texte =~ s/&oacute;|&#243;/ó/g;
	$texte =~ s/&Oacute;|&#211;/Ó/g;
	$texte =~ s/&ocirc;|&#244;/ô/g;
	$texte =~ s/&Ocirc;|&#212;/Ô/g;
	$texte =~ s/&ograve;|&#242;/ò/g;
	$texte =~ s/&Ograve;|&#210;/Ò/g;
	$texte =~ s/&oslash;|&#248;/ø/g;
	$texte =~ s/&Oslash;|&#216;/Ø/g;
	$texte =~ s/&otilde;|&#245;/õ/g;
	$texte =~ s/&Otilde;|&#213;/Õ/g;
	$texte =~ s/&ouml;|&#246;/ö/g;
	$texte =~ s/&Ouml;|&#214;/Ö/g;
	$texte =~ s/&oelig;|&#156;/œ/g;
	$texte =~ s/&OElig;|&#140;/Œ/g;
	$texte =~ s/&scaron;|&#353;/š/g;
	$texte =~ s/&Scaron;|&#352;/Š/g;
	$texte =~ s/&szlig;|&#223;/ß/g;
	$texte =~ s/&eth;|&#240;/ð/g;
	$texte =~ s/&ETH;|&#208;/Ð/g;
	$texte =~ s/&thorn;|&#254;/þ/g;
	$texte =~ s/&THORN;|&#222;/Þ/g;
	$texte =~ s/&uacute;|&#250;/ú/g;
	$texte =~ s/&Uacute;|&#218;/Ú/g;
	$texte =~ s/&ucirc;|&#251;/û/g;
	$texte =~ s/&Ucirc;|&#219;/Û/g;
	$texte =~ s/&ugrave;|&#249;/ù/g;
	$texte =~ s/&Ugrave;|&#217;/Ù/g;
	$texte =~ s/&uuml;|&#252;/ü/g;
	$texte =~ s/&Uuml;|&#220;/Ü/g;
	$texte =~ s/&yacute;|&#253;/ý/g;
	$texte =~ s/&Yacute;|&#221;/Ý/g;
	$texte =~ s/&yuml;|&#255;/ÿ/g;
	$texte =~ s/&Yuml;|&#376;/Ÿ/g;
	$texte =~ s/&curren;|&#164;/¤/g;
	$texte =~ s/&euro;|&#128;/€/g;
	$texte =~ s/\$|&#36;/\$/g;
	$texte =~ s/&cent;|&#162;/¢/g;
	$texte =~ s/&pound;|&#163;/£/g;
	$texte =~ s/&yen;|&#165;/¥/g;
	$texte =~ s/&fnof;|&#402;/ƒ/g;
	$texte =~ s/&alpha;|&#945;/a/g;
	$texte =~ s/&Alpha;|&#913;/?/g;
	$texte =~ s/&beta;|&#946;/ß/g;
	$texte =~ s/&Beta;|&#914;/?/g;
	$texte =~ s/&gamma;|&#947;/?/g;
	$texte =~ s/&Gamma;|&#915;/G/g;
	$texte =~ s/&delta;|&#948;/d/g;
	$texte =~ s/&Delta;|&#916;/?/g;
	$texte =~ s/&epsilon;|&#949;/e/g;
	$texte =~ s/&Epsilon;|&#917;/?/g;
	$texte =~ s/&zeta;|&#950;/?/g;
	$texte =~ s/&Zeta;|&#918;/?/g;
	$texte =~ s/&eta;|&#951;/?/g;
	$texte =~ s/&Eta;|&#919;/?/g;
	$texte =~ s/&theta;|&#952;/?/g;
	$texte =~ s/&Theta;|&#920;/T/g;
	$texte =~ s/&iota;|&#953;/?/g;
	$texte =~ s/&Iota;|&#921;/?/g;
	$texte =~ s/&kappa;|&#954;/?/g;
	$texte =~ s/&Kappa;|&#922;/?/g;
	$texte =~ s/&lambda;|&#955;/?/g;
	$texte =~ s/&Lambda;|&#923;/?/g;
	$texte =~ s/&mu;|&#956;/µ/g;
	$texte =~ s/&Mu;|&#924;/?/g;
	$texte =~ s/&nu;|&#957;/?/g;
	$texte =~ s/&Nu;|&#925;/?/g;
	$texte =~ s/&xi;|&#958;/?/g;
	$texte =~ s/&Xi;|&#926;/?/g;
	$texte =~ s/&omicron;|&#959;/?/g;
	$texte =~ s/&Omicron;|&#927;/?/g;
	$texte =~ s/&pi;|&#960;/p/g;
	$texte =~ s/&Pi;|&#928;/?/g;
	$texte =~ s/&rho;|&#961;/?/g;
	$texte =~ s/&Rho;|&#929;/?/g;
	$texte =~ s/&sigma;|&#963;/s/g;
	$texte =~ s/&sigmaf;|&#962;/?/g;
	$texte =~ s/&Sigma;|&#931;/S/g;
	$texte =~ s/&tau;|&#964;/t/g;
	$texte =~ s/&Tau;|&#932;/?/g;
	$texte =~ s/&upsilon;|&#965;/?/g;
	$texte =~ s/&Upsilon;|&#933;/?/g;
	$texte =~ s/&phi;|&#966;/f/g;
	$texte =~ s/&Phi;|&#934;/F/g;
	$texte =~ s/&chi;|&#967;/?/g;
	$texte =~ s/&Chi;|&#935;/?/g;
	$texte =~ s/&psi;|&#968;/?/g;
	$texte =~ s/&Psi;|&#936;/?/g;
	$texte =~ s/&omega;|&#969;/?/g;
	$texte =~ s/&Omega;|&#937;/O/g;
	$texte  =~ s/&deg;|&#176;/°/g;
	$texte =~ s/&micro;|&#181;/µ/g;
	$texte =~ s/&lt;|&#60;/</g;
	$texte =~ s/&gt;|&#62;/>/g;
	$texte =~ s/&le;|&#8804;/=/g;
	$texte =~ s/&ge;|&#8805;/=/g;
	$texte =~ s/=|&#61;/=/g;
	$texte =~ s/&asymp;|&#8776;/˜/g;
	$texte =~ s/&ne;|&#8800;/?/g;
	$texte =~ s/&equiv;|&#8801;/=/g;
	$texte =~ s/&plusmn;|&#177;/±/g;
	$texte =~ s/&minus;|&#8722;/-/g;
	$texte =~ s/\+|&#43;/\+/g;
	$texte =~ s/&times;|&#215;/×/g;
	$texte =~ s/&divide;|&#247;/÷/g;
	$texte =~ s/&frasl;|&#8260;//g;
	$texte =~ s/%|&#37;/%/g;
	$texte =~ s/&permil;|&#8240;/‰/g;
	$texte =~ s/&frac14;|&#188;/¼/g;
	$texte =~ s/&frac12;|&#188;/½/g;
	$texte =~ s/&frac34;|&#188;/¾/g;
	$texte =~ s/&sup1;|&#185;/¹/g;
	$texte =~ s/&sup2;|&#178;/²/g;
	$texte =~ s/&sup3;|&#179;/³/g;
	$texte =~ s/&ordm;|&#186;/º/g;
	$texte =~ s/&ordf;|&#170;/ª/g;
	$texte =~ s/&fnof;|&#402;/ƒ/g;
	$texte =~ s/&prime;|&#8242;/'/g;
	$texte =~ s/&Prime;|&#8243;/?/g;
	$texte =~ s/&part;|&#8706;/?/g;
	$texte =~ s/&prod;|&#8719;/?/g;
	$texte =~ s/&sum;|&#8721;/?/g;
	$texte =~ s/&radic;|&#8730;/v/g;
	$texte =~ s/&infin;|&#8734;/8/g;
	$texte =~ s/&not;|&#172;/¬/g;
	$texte =~ s/&cap;|&#8745;/n/g;
	$texte =~ s/&int;|&#8747;/?/g;
	$texte =~ s/<.+?>//g;
	$texte =~ s/&/et/g;
	
    return $texte;
}
# Procédure d'étiquetage Treetagger
sub lancetreetagger {
	system("perl TreeTagger/tokenise-fr.pl $outputtmp | tree-tagger.exe TreeTagger/french.par -lemma -token -no-unknown -sgml > $folder./treetagger_$rubrique");
	system("perl treetagger2xml.pl $folder./treetagger_$rubrique");
	# procedure bao3
sub extrairePatrons {
	system("perl bao3_rb.pl $folder./treetagger_$rubrique.xml patterns.txt $folder")
	}
}