#!/usr/bin/perl
#On lance le programme comme ceci: perl parcours.pl 2013/
use Encode qw (encode);
open (ESSAI, ">>titre_description.txt");
my $racine = "$ARGV[0]";
print "Répertoire de départ : $racine \n";
my %DICO=();

#On prépare les fichiers pour chaque rubrique
my %nom_rubrique;
$nom_rubrique{UNE}= "0,2-3208,1-0,0.xml";
$nom_rubrique{INTERNATIONAL}= "0,2-3210,1-0,0.xml";
$nom_rubrique{EUROPE}= "0,2-3214,1-0,0.xml";
$nom_rubrique{SOCIETE}= "0,2-3224,1-0,0.xml";
$nom_rubrique{IDEE}= "0,2-3232,1-0,0.xml";
$nom_rubrique{ECONOMIE}= "0,2-3234,1-0,0.xml";
$nom_rubrique{MEDIAS}= "0,2-3236,1-0,0.xml";
$nom_rubrique{VOUS}= "0,2-3238,1-0,0.xml";
$nom_rubrique{SPORT}= "0,2-3242,1-0,0.xml";
$nom_rubrique{PLANETE}= "0,2-3244,1-0,0.xml";
$nom_rubrique{CULTURE}= "0,2-3246,1-0,0.xml";
$nom_rubrique{LIVRE}= "0,2-3260,1-0,0.xml";
$nom_rubrique{UNE1}= "0,2-3404,1-0,0.xml";
$nom_rubrique{CINEMA}= "0,2-3476,1-0,0.xml";
$nom_rubrique{VOYAGE}= "0,2-3546,1-0,0.xml";
$nom_rubrique{TECHNOLOGIES}= "0,2-651865,1-0,0.xml";
$nom_rubrique{POLITIQUE}= "0,57-0,64-823353,0.xml";
#########
system("mkdir -p Sortie-Regexp");
system("mkdir -p Treetagged");  
#########
#On ouvre les fichiers en écriture avec pour titre le nom de la rubrique
foreach $nom (keys(%nom_rubrique)){
	my $out1="Sortie-Regexp/$nom.txt";
	open(OUT,">","$out1");
	
	my $out2="Sortie-Regexp/$nom.xml";
	open(OUT2,">","$out2");
#	print OUT2 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \n";
	print OUT2 "<Racine> \n";
    %DICO=();
    #On fait appel à la fonction "parcours" 
	&parcours($racine, $nom); 

    #On a terminé et on ferme le tout
    print OUT2 "</Racine>\n";
    close(OUT);
    close(OUT2);
}
#ouverture des fichiers de texte taggé
foreach $nom (keys(%nom_rubrique)){
	my $untagged="Sortie-Regexp/".$nom.".xml";
&treetagger($untagged,$nom);
}
exit;
#
##########################################################
#
# Procédure qui sert à parcourir l'arborescence du fichier mis en argument 
sub parcours {
	my $dossier=shift(@_);
	my $nomdufichier = shift(@_);
	
	opendir (DOSSIER,$dossier);
	my @files = readdir(DOSSIER);
	closedir(DOSSIER);
	#print "Liste des fichiers de $dossier: @files\n";
	foreach my $file (@files) {
		# 3 conditions :
		# Si le fichier courant est . ou .. : on le laisse tomber.
		next if $file =~ /^\.\.?$/;
		$file=$dossier."/".$file; 
		# Si le fichier courant est un vrai fichier et si c'est un fichier XML on le traite	
		# Il ne faut traiter que les fichiers XML.
		if ($file=~/\.xml$/) {
			if ($file=~/$nom_rubrique{$nomdufichier}/) {
                &filtreur($file,$nomdufichier);
                #print $file,"\n";
			}
		}
		# Si le fichier courant est un rep  : on regarde son contenu.
		if (-d $file) {
			&parcours($file,$nomdufichier);
		}
	}	
}
#
##########################################################
#
# Procédure qui sert à selectionner le texte que l'on souhaite garder
sub filtreur {
    #On va chercher le texte sur lequel la fonction filtreur s'exerce et le passer en argument.
    
    my $file=shift(@_); 
	my $nom=shift(@_); 
	
    print "filtrage de $file \n";
    my $texteconcatene="";
    open (IN,"<","$file");
    #Parcours du fichier d'entrée : transformation en une seule ligne
    while (my $ligne=<IN>) {
        chomp($ligne);
        $texteconcatene.=$ligne;
    }
    close(IN);
    $texteconcatene=~s/> *</></g;
    # recherche dans la chaine concatenee
	#Si la ligne contient le motif, alors on le traite
	while ($texteconcatene=~m/<item>(.+?)<\/item>/g) {
		#print ESSAI "VOICI LE TEXTE : $texteconcatene\n";
        my $texte = $1;
		while ($texte=~/<title>(.+?)<\/title><link>(?:.+?)<\/link><description>(.+?)<\/description>/gm) {
			my $titre=$1;
			print ESSAI "VOICI LE TITRE : $titre\n";
			my $description=$2;
			print ESSAI "VOICI LA DESCRIPTION: $description\n";
			#Si le texte existe déjà dans un dictionnaire que nous avons créé, alors on ne fait rien
			if (exists($DICO{$titre})){
				
			}
			#Sinon on le filtre et on s'assure de le rentrer dans le dictionnaire pour la suite
			else{
			$titre=~ s/Toute .+ connexion//g;
			$titre=~s/&#39;/'/g;
			$titre=~s/&#34;/"/g;
			$titre =~ s/&lt;/</g;
			$titre =~ s/&gt;/>/g;
			$titre =~ s/<a href[^>]+>//g;
			$titre =~ s/<img[^>]+>//g;
			$titre =~ s/<\/a>//g;
			$titre =~ s/&#38;#39;/'/g;
			$titre =~ s/&#38;#34;/"/g;
			$titre =~ s/<[^>]+>//g;
			$titre =~ s/Le Monde.fr : .+//g;
			$titre =~ s/Le Monde.fr//g;
			$titre=~s/&#233;/é/g;
			$titre=~s/&#234;/è/g;
			$titre=~s/&nbsp/ /g;
			$titre=~s/&/and/g;
			my $titreiso=encode('ISO 8859-1',$titre);
			$description=~ s/Toute .+ connexion//g;
			$description=~s/&#39;/'/g;
			$description=~s/&#34;/"/g;
			$description =~ s/&lt;/</g;
			$description =~ s/&gt;/>/g;
			$description =~ s/<a href[^>]+>//g;
			$description =~ s/<img[^>]+>//g;
			$description =~ s/<\/a>//g;
			$description =~ s/&#38;#39;/'/g;
			$description =~ s/&#38;#34;/"/g;
			$description =~ s/<[^>]+>//g;
			$description =~ s/Le Monde.fr : .+//g;
			$description =~ s/Le Monde.fr//g;
			$description=~s/&#233;/é/g;
			$description=~s/&#234;/è/g;
			$description=~s/&nbsp/ /g;
			$description=~s/&/and/g;
			my $descISO=encode('ISO 8859-1', $description);
			#Si rien ne suit Titre: alors on ne l'écrit pas dans le fichier
			print OUT " Titre: $titreiso\n" if $texte ne "";
			print OUT2 "<titre>$titre</titre>\n" if $texte ne "";
			print OUT " Description: $descISO\n" if $texte ne "";
			print OUT2 "<description>$description</description>\n" if $texte ne "";
		$DICO{$titre}++;
		}
	}
	}
}
#
##########################################################
#
############################BAO2
sub treetagger
{
	my $text=shift(@_);
	my $rub=shift(@_);
	system("perl5.18.2 Treetagger/cmd/utf8-tokenize.perl $text | Treetagger/bin/tree-tagger Treetagger/french-utf8.par -lemma -token -no-unknown -sgml > Treetagged/Tagged_$rub.txt");
	system("perl5.18.2 Treetagger/cmd/treetagger2xml.pl Treetagged/Tagged_$rub.txt");
}
############################
