#!/usr/bin/perl
use Unicode::String qw(utf8);
my $racine = $ARGV[0];
$racine =~ s/[\/]$//; #si ça se termine par / on l'enlève

my $content1 = ""; #pour fichier XML
my $content2 = ""; #pour fichier TXT
my $nbArticles = 0;
my $nbfic = 0;
my %dicoTitres = ();
my %dicoDesc = ();

my %dictionnairedesrubriques=();
my %dictionnairedesItems = (); #pour éviter les doublons

#remplit le dico des rubriques
&parcoursarborescencefichiersrubriques($racine);

my @liste_rubriques = keys(%dictionnairedesrubriques);


foreach my $rub (@liste_rubriques) {
	#print "coucou\n";
    #print $rub,"\n";
    #----------------------------------------
    my $output1="./SORTIE/SORTIE-extract-txt-".$rub.".xml";
    my $output2="./SORTIE/SORTIE-extract-txt-".$rub.".txt";
    my $output3="./SORTIE/SORTIE-extract-txt-".$rub."-treetagger.xml";
    if (!open (FILEOUT1,">:encoding(utf-8)", $output1)) { die "Pb a l'ouverture du fichier $output1"};
    if (!open (FILEOUT2,">:encoding(utf-8)",$output2)) { die "Pb a l'ouverture du fichier $output2"};
    if (!open (FILEOUT3,">:encoding(utf-8)",$output3)) { die "Pb a l'ouverture du fichier $output3"};
    print FILEOUT1 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
    print FILEOUT1 "<PARCOURS>\n";
    print FILEOUT3 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
    print FILEOUT3 "<PARCOURS>\n";
    close(FILEOUT1);
    close(FILEOUT2);
    close(FILEOUT3);
}

&parc_recurse($racine);

#On ferme les XML, balise PARCOURS.
foreach my $rub (@liste_rubriques) {
    my $output1="SORTIE/SORTIE-extract-txt-".$rub.".xml";
    my $output3="SORTIE/SORTIE-extract-txt-".$rub."-treetagger.xml";
    if (!open (FILEOUT1,">>:encoding(utf-8)", $output1)) { die "Pb a l'ouverture du fichier $output1"};
    if (!open (FILEOUT3,">>:encoding(utf-8)",$output3)) { die "Pb a l'ouverture du fichier $output3"};
    print FILEOUT1 "</PARCOURS>\n";
    print FILEOUT3 "</PARCOURS>\n";
    close(FILEOUT1);
    close(FILEOUT3);
}
exit;



sub parc_recurse{
	#print "entrée du parcours\n";
    my $dossier = shift(@_);
    opendir(DOSSIER,$dossier) or die "keke can't open $dossier: $!\n";
    my @files = readdir(DOSSIER); 
    closedir(DOSSIER);
    foreach my $file (@files) {
	    # OK print "ffffffffff",$file,"\n";
		next if ($file=~/^\.\.?$/);
		$file=$dossier."/".$file;
		if (-d $file){
	    	&parc_recurse($file);
		}
		if (-f $file){
	    	if (($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/)){
	    	#première lecture pour détection de l'encodage
				open(FILEIN, $file);
				my $texte="";
				while (my $ligne=<FILEIN>) {
					$ligne =~ s/\r//g;
		    		$ligne =~ s/\n//g;
		    		$texte .= $ligne;
				}
				close(FILEIN);
				#print $texte;
				$texte=~/encoding ?= ?[\'\"]([^\'\"]+)[\'\"]/i;
				my $encodage=$1;
				#print "encodage : ",$encodage; #!!
				if ($encodage ne ""){
					print "coucou !";
					print "Extraction dans : $file \n";
					my $tmptexteXML="<file>\n";
		    		$tmptexteXML.="<name>$file</name>\n";
		    		my $tmptexteXMLtagger="<file>\n";
		    		$tmptexteXMLtagger.="<name>$file</name>\n";
		    		$texte =~ s/> *</></g;
		    		$texte=~/<pubDate>([^<]+)<\/pubDate>/;
		    		$tmptexteXML.="<date>$1</date>\n";
		    		$tmptexteXML.="<items>\n";
		    		$tmptexteXMLtagger.="<date>$1</date>\n";
		    		$tmptexteXMLtagger.="<items>\n";
		    		my $tmptexteBRUT="";
		    		open(FILE,"<:encoding($encodage)", $file);
					$texte="";
					#on enlève les retour-chariots et sauts de ligne
		    		while (my $ligne=<FILE>){
		    			$ligne =~s/\r//g;
						$ligne =~ s/\n//g;
						$texte .= $ligne;
		    		}
		    		close(FILE);
		    		$texte=~s/> *</></gi;
					# on recherche la rubrique
					$texte=~/<channel><title>([^<]+)<\/title>/;
					my $rub=$1;
	    			$rub=~s/é/e/gi;
	    			$rub=~s/è/e/gi;
	 				$rub=~s/ê/e/gi;
					$rub=~s/à/a/gi;
					$rub=~ s/Le *Monde *\. *fr *://gi;
					$rub=~ s/ //g;
					$rub=uc($rub);
					#on ouvre les fichiers avec le nom de la rubrique trouvé
					my $output1="SORTIE/SORTIE-extract-txt-".$rub.".xml";
					my $output2="SORTIE/SORTIE-extract-txt-".$rub.".txt";
					my $output3="SORTIE/SORTIE-extract-txt-".$rub."-treetagger.xml";
					if (!open (FILEOUT1,">>:encoding(utf-8)", $output1)) { die "Pb a l'ouverture du fichier $output1"};
					if (!open (FILEOUT2,">>:encoding(utf-8)", $output2)) { die "Pb a l'ouverture du fichier $output2"};
					if (!open (FILEOUT3,">>:encoding(utf-8)", $output3)) { die "Pb a l'ouverture du fichier $output3"};
					my $compteurItem=0;
					my $compteurEtiquetage=0;
					while ($texte =~ /<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/g) {
						my $titre=$1;
						my $resume=$2;
						if (uc($encodage) ne "UTF-8") {utf8($titre);utf8($resume);}
						$titre = &nettoietexte($1);
						$resume = &nettoietexte($2);
						$compteurItem++;
						if (!(exists($dictionnairedesitems{$resume}))) {
			    			$compteurEtiquetage++;
			    			print "Etiquetage (num : $compteurEtiquetage)  sur item (num : $compteurItem) \n"; #!!
                			my ($titretiquete,$textetiquete)=&etiquetageavectreetagger($titre,$resume);
                			print $titretiquete."ccoucou etiq";
			    			$tmptexteBRUT.="$titre\n\n";
			    			$tmptexteBRUT.="$resume\n\n\n\n";
			    			$tmptexteXML.= "<item><title>$titre</title><abstract>$resume</abstract></item>\n";
			    			$tmptexteXMLtagger.="<item>\n<title>\n$titretiquete</title>\n<abstract>\n$textetiquete</abstract>\n</item>\n";
			    			$dictionnairedesitems{$resume}++;
						}
						else {
			    			$tmptexteXML.="<item><title>-</title><abstract>-</abstract></item>\n"; #dans le cas où ça existe déjà
						}
					}
					$tmptexteXML.="</items>\n</file>\n";
		    		$tmptexteXMLtagger.="</items>\n</file>\n";
		    		print FILEOUT1 $tmptexteXML;
		    		print FILEOUT2 $tmptexteBRUT;
		    		print FILEOUT3 $tmptexteXMLtagger;
		    		close FILEOUT1;
		    		close FILEOUT2;
		    		close FILEOUT3;
				}
				else{
		    		print "$file ==> $encodage \n";
				}
	    	}
	    }
	}
}	
    
		



sub nettoietexte {
    my $texte=shift;
    $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/&#233;/é/g;
    $texte =~ s/&#234;/ê/g;
    return $texte;
}



#enregistrement des rubriques
sub parcoursarborescencefichiersrubriques {
	#print "keke\n";
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
    	#print $file;
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file;
		if (-d $file) {
	    	&parcoursarborescencefichiersrubriques($file);	#recurse!
		}
		if (-f $file) {
	    	if (($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/)) {
	    	#première lecture pour repérer l'encodage
				open(FILE,$file);
				my $texte="";
				while (my $ligne=<FILE>) {
			    	$ligne =~ s/\r//g;
		    		$ligne =~ s/\n/ /g; 
					#print $ligne."\n";
					#print "keke"."\n";
		    		$texte .= $ligne;
		    		#print "keke"."\n";
				}
				close(FILE);
			
				#print $texte."\n\n";
				#exit;
				#$texte =~ s/\n//g;
				$texte =~ s/> *</></g; #supprime les espaces éventuels entre les balises
		 		#print $file."\n";
		 		#$texte=~s/>\n//g;
				#print $texte."\n\n";
				#print keke."\n";
				$texte=~/encoding ?= ?[\'\"]([^\'\"]+)[\'\"]/i; #repère l'encodage
				my $encodage=$1; #repérage de l'encodage
				#print $1."\n";
				if ($encodage ne "") {
					#print $encodage."\n";
					open(FILE,"<:encoding($encodage)", $file); #ouverture du fichier dans le bon encodage
		    		$texte="";
					while (my $ligne=<FILE>) {
						$ligne =~s/\r//g;
						$ligne =~ s/\n/ /g;
						#print $ligne."\n";
						$texte .= $ligne;
		    		}
		    		#print $file."\n";
		    		#print $texte."\n\n";
		    		close(FILE);
		    		$texte =~ s/> *</></g;
		    		#print "coucou";
		    		#print $texte."\n\n";
		    		if ($texte=~/<channel><title>([^>]+)<\/title>/) {
		    			$rub = $1;
						$rub=~s/é/e/gi;
						$rub=~s/è/e/gi;
						$rub=~s/ê/e/gi;
						$rub=~s/à/a/gi;
						$rub=~ s/Le *Monde *\. *fr *://gi;
						$rub=~ s/ //g;
						$rub=uc($rub);
						$dictionnairedesrubriques{$rub}++;
		    		}
				}
				else {
		    		print "problème repérage d'encodage ! ";
				}
	    	}	
		}
	}
}
		

	
    	

sub etiquetageavectreetagger {
    my ($titre,$texte)=@_;
    #----- le titre
    my $codage="utf-8";
    my $tmptag="./texteaetiqueter.txt";
    open (TMPFILE,">:encoding(utf-8)", $tmptag);
    #print $titre."coucou titre2 !!";
    print TMPFILE $titre,"\n";
    close(TMPFILE);
    #tagging du titre
    system("cat $tmptag |perl /Users/kevind89/Documents/Cours2013-2014/Projet/Cours26032014/TreeTagger/cmd/tokenize.pl | /Users/kevind89/Documents/Cours2013-2014/Projet/Cours26032014/TreeTagger/bin/tree-tagger /Users/kevind89/Documents/Cours2013-2014/Projet/Cours26032014/TreeTagger/lib/french-utf8.par -lemma -token  > treetagger.txt");
    system("perl /Users/kevind89/Documents/Cours2013-2014/Projet/Cours26032014/TreeTagger/cmd/treetagger2xml-utf8.pl treetagger.txt $codage ");
    # lecture du resultat tagué en xml :
    open(OUT,"<:encoding(utf-8)","treetagger.txt.xml"); #fichier créé automatique par treetagger2xml
    my $firstline=<OUT>; #passe la première ligne inutile
    my $titreetiquete="";
    while (my $l=<OUT>) {
		$titreetiquete.=$l;
    }
    close(OUT);
    
    #----- le résumé
    open (TMPFILE,">:encoding(utf-8)", $tmptag);
    print TMPFILE $texte,"\n";
    close(TMPFILE);
    system("cat $tmptag | /Users/kevind89/Documents/Cours2013-2014/Projet/Cours26032014/TreeTagger/bin/tree-tagger /Users/kevind89/Documents/Cours2013-2014/Projet/Cours26032014/TreeTagger/lib/french-utf8.par -lemma -token  > treetagger.txt");
    system("perl /Users/kevind89/Documents/Cours2013-2014/Projet/Cours26032014/TreeTagger/cmd/treetagger2xml-utf8.pl treetagger.txt $codage");
    # lecture du resultat tagué en xml :
    open(OUT,"<:encoding(utf-8)","treetagger.txt.xml");  #problème sur l'endroit du tagging format xml !
    my $firstline=<OUT>;
    my $texteetiquete="";
    while (my $l=<OUT>) {
		$texteetiquete.=$l;
    }
    close(OUT);
    # on renvoie les resultats :
    return ($titreetiquete,$texteetiquete);
}

