#/usr/bin/perl
<<DOC; 
Nom : Sarah Terrail-Lormel
MARS 2008
 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 (dans un répertoire "resultats") :
 - un fichier texte filtré (contenu textuel des balises <title> et <description>)
 - dans un répertoire "tag" :	- un fichier texte etiquetté
								- un fichier xml etiquetté
DOC
#-----------------------------------------------------------
our $rep="2008";
our $resultat="resultats";
$rep=~ s/[\/]$//;
#---------------------------------------- table de hashage
my %F=("3208" =>"alaune",
		"3210"=>"international",
		"3214"=>"europe",
		"3224"=>"societe",
		"3232"=>"opinions",
		"3234"=>"economie",
		"3236"=>"medias",
		"3238"=>"rdv",
		"3242"=>"sports",
		"3244"=>"environnement_sciences",
		"3246"=>"culture",
		"3476"=>"cinema",
		"3260"=>"livres",
		"3404"=>"examens",
		"3546"=>"voyages",
		"823353"=>"politique",
		"651865"=>"technologies");
#----------------------------------------
&parcoursarborescencefichiers($rep);
#----------------------------------------
########################## Traitement TREETAGGER #################################
my $nomrub;
foreach $nomrub (values(%F))
	{
#-------------------------------------- création d'un répertoire ("tag")pour les sorties de treetagger
		system ("mkdir -p ./$resultat/tag");
#-------------------------------------- tokenisation du fichier filtré puis (PIPE) étiquetage avec treetagger et écriture dans un fichier de sortie 
		system ("perl ./treetagger/cmd/tokenise-fr.pl $resultat/$nomrub.txt | ./treetagger/bin/tree-tagger.exe ./treetagger/lib/french.par -lemma -token -sgml > $resultat/tag/$nomrub.txt");
#-------------------------------------- histoire de faire perdre un peu de temps au script et de faire patienter l'utilisateur..
		print "Tagging de $clef.txt en cours...\n";
#-------------------------------------- création d'un fichier taggé au format XML
		system ("perl ./treetagger/cmd/treetagger2xml.pl $resultat/tag/$nomrub.txt");
#-------------------------------------- à nouveau du blabla écran pour faire joli
		print "$nomrub.txt has been XMLized\n";
	}
############################################################################

################################# DEF DES PROCEDURES #####################################
###----------------------------------------------Procédure qui parcourt les fichiers et les traite
sub parcoursarborescencefichiers 
{
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) 
	{
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file;
		
		if (-d $file) 
		{
			&parcoursarborescencefichiers($file);	#recurse!
		}

		my $text_t="";
		my $text_d="";

		if (-f $file) 
		{

			if ($file=~/\w+.xml/)
			{
				open(FILEINPUT,"$file");
				while ($ligne=<FILEINPUT>)
				{
					$ligne=&net_codage($ligne);

					if (($ligne=~/<title>(.*)<\/title>/) && ($ligne!~/<title>Le Monde\.fr/))
					{
						$text_t.= "$1 \n";
					}
					if ($ligne=~/<description>(.*)<\/description>/)
					{
						$text_d.= "$1 \n";
					}
				}
			}
		}
		
		my @rub = keys(%F);
		my $clef;
		foreach $clef (keys(%F))
		{
			my $nom_fich=$F{$clef};
			if ($file =~ /$clef/) 
			{
				$nom_fich=$F{$clef};
				if (!open (FILEOUT,">>$resultat/$nom_fich.txt")) { die "Pb a l'ouverture du fichier $nom_fich"};
				print FILEOUT $text_t,$text_d;
				close(FILEOUT);
			}
		}		
	}	
}

###------------------------------------------ Procédure de nettoyage
sub net_codage
{
my $ligne=shift(@_);
$ligne=~s/&#38;#39;/'/g;
$ligne=~s/&#38;#34;/"/g;
$ligne=~s/&#34;/"/g;
$ligne=~s/&#39;/'/g;
$ligne=~s/&#38;/&/g;
$ligne=~s/&#91;/[/g;
$ligne=~s/&#93;/]/g;
#$ligne=~s/Le Monde.fr//g;
$ligne=~s/Retrouvez l'ensemble.*\n//g;
$ligne=~s/Toute l'actualité au moment de la connexion//g;
return ($ligne);
}

###---------------------------------------------- PENSE BETE : La requête Xpath

#v:(//element[./data[contains(text(),'NOM')]]/following-sibling::element[1][./data[contains(text(),'ADJ')]]/data[3]/text()) | (//element[./data[contains(text(),'ADJ')]]/preceding-sibling::element[1][./data[contains(text(),'NOM')]]/data[3]/text() )