#!/usr/bin/perl
<<DOC; 
Votre Nom : Chunxiao YAN 
 mars 2015
 usage : perl 2015BAOpour_un_seul_rup.pl numero_de_la_rubrique
DOC
#use strict;
use Unicode::String qw(utf8);


my $rep="$ARGV[0]";
$rep=~ s/[\/]$//;  
my $rub="$ARGV[1]";

#-----les dictionnaires---------
my %dicTitle=();
my %dicDescription=();

    #----------------------------------------
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 FILEOUT1 "<NOM>Chunxiao YAN 2015</NOM>\n";
print FILEOUT3 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print FILEOUT3 "<PARCOURS>\n";
print FILEOUT3 "<NOM>Chunxiao YAN 2015</NOM>\n";
close(FILEOUT1);
close(FILEOUT2);
close(FILEOUT3);


#----------------------------------------
&parcoursarborescencefichiers($rep);	# traitement de tous les fichiers 

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);

#-----------fin d'execution-----------------------------------


#----------definition des focntions------------------------------------
#----------------------------------------------------------------------
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!
		print "je rentre dans $file \n ";
		#my $attente=<STDIN>;

	    }
	
	if (-f $file) {
        print "Traitement de : $file\n";
		#print OUT "$file\n";
		
		if ($file=~/.+$rub.+\.xml$/){
		    open(FILE,$file);
		    $ligne=<FILE>;
		    print $file;
            close(FILE);
        
		#----------------------detecte encodqge--------------------------------
		    
			$ligne =~/encoding=[\'\"]([^\'\"]+)[\'\"]/i;

            my $encodage = $1;
            print "ENCODAGE : $encodage\n";
        #----------------------------------------------------------------------
        open (FILE,"<:encoding($encodage)",$file);
        $chainecomplete = "";

        while ($ligne=<FILE>) {
            chomp $ligne;
            $chainecomplete = $chainecomplete . " " . $ligne;
        }
        $chainecomplete=~s/> +</></g;
        
        #print "$chainecomplete\n";
        
		#-------------------traitement de fichier rubrique---------------------------------------
	    if ($encodage ne "") {
		    print "Extraction dans : $file \n";
		    my $tmptexteXML="<file>\n";
		    $tmptexteXML.="<name>$file</name>\n";
			$chainecomplete=~/<pubDate>([^<]+)<\/pubDate>/;
			$tmptexteXML.="<date>$1</date>\n";
		    $tmptexteXML.="<items>\n";
			
		    my $tmptexteXMLtagger="<file>\n";
		    $tmptexteXMLtagger.="<name>$file</name>\n";
			$tmptexteXMLtagger.="<date>$1</date>\n";
		    $tmptexteXMLtagger.="<items>\n";
			
		    
        
     		my $tmptexteBRUT="";
		    open(FILE,"<:encoding($encodage)", $file);
			
		    #print "Traitement de :\n$file\n";
		    $chainecomplete="";
            while ($ligne=<FILE>) {
               chomp $ligne;
               $chainecomplete = $chainecomplete . " " . $ligne;
               }
			
		    close(FILE);
		    $chainecomplete=~s/> *</></g;
		    #----------------------------------------
		    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 $cpt=0;
		    my $compteurEtiquetage=0;
			
			#----------------------------------------------
            while ($chainecomplete=~/<item><title>([^<]*)<\/title>.*?<description>([^<]*)<\/description>/g) {
	            $cpt++;
		        my $title=$1; 
		        my $description=$2;

			    if (uc($encodage) ne "UTF8") {
				      print "changement en utf8\n";
			            utf8($title);
			            utf8($description);
			         
			        }
 
                if (!(exists $dicTitle{$title})){	 
					    $dicTitle{$title}++;
					    $dicDescription{$description}++;
			            $compteurEtiquetage++;
				#--------------nettoyage-------------------
				        print "nettoyage";
				        $title=&nettoyage($title);
			            #print "$title";
		                $description=&nettoyage($description);
			            $title2=&nettoyage2($title);
		                $description2=&nettoyage2($description);
				
				        print "ettiquetage";
				#----------etiquetage de titre et de decscription------------------
				        ($titletag,$descriptiontag)=&ettiquetage($title,$description);
				#-------------------------------------------------	
                        $tmptexteBRUT.="§ $title \n";
			            $tmptexteBRUT.="$description \n";
			            $tmptexteXML.="<item><title>$title2</title><abstract>$description2</abstract></item>\n";
			            $tmptexteXMLtagger.="<item>\n<title>\n$titletag</title>\n<abstract>\n$descriptiontag</abstract>\n</item>\n";
                }
			      else {
			       $tmptexteXML.="<item><title>-</title><abstract>-</abstract></item>\n";
				   print "doublons";
			    }    
			    } 		
				
			   $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 ettiquetage {
    my ($title,$texte)=@_;
	#traitement
    #---------titre-----------------
    my $codage="utf-8";
	my $tmptag="texteaetiqueter.txt";
	#creer un fichier temporaire

    open(TMPFILE,">:encoding(utf-8)",$tmptag);
	print TMPFILE $title;
    close (TMPFILE);
	system("perl5.18.4 tokenise-utf8.pl $tmptag | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > treetagger.txt");
	system("perl5.18.4 treetagger2xml.pl treetagger.txt $codage");
	open (TAGOUT,"<:encoding(utf-8)","treetagger.txt.xml");
	my $titreetiquete="";
	while (my $ligne=<TAGOUT>){
		$titreetiquete.=$ligne;
	}
 	close (TAGOUT);
    #-------------description---------
    open(TMPFILE,">:encoding(utf-8)",$tmptag);
	print TMPFILE $texte;
    close (TMPFILE); 
	system("perl5.18.4 tokenise-utf8.pl $tmptag | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > treetagger.txt");
    system("perl5.18.4 treetagger2xml.pl treetagger.txt $codage");
	open (TAGOUT,"<:encoding(utf-8)","treetagger.txt.xml");  
	my $texteetiquete="";
	while (my $ligne=<TAGOUT>){
		$texteetiquete.=$ligne;
	}
 	close (TAGOUT);
	
	return($titreetiquete,$texteetiquete);
}



sub parcoursrubriques {
    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) {
	    &parcoursrubriques($file);	#recurse!
	}
	if (-f $file) {
	    if (($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/)) {
		open(FILE,$file);
		#print "Traitement de :\n$file\n";
		my $texte="";
		while (my $ligne=<FILE>) {
		    $ligne =~ s/\n//g;
		    $texte .= $ligne;
		}
		close(FILE);
		$texte=~/encoding ?= ?[\'\"]([^\'\"]+)[\'\"]/i;
		my $encodage=$1;
		if ($encodage ne "") {
		    open(FILE,"<:encoding($encodage)", $file);
		    #print "Traitement de :\n$file\n";
		    $texte="";
		    while (my $ligne=<FILE>) {
			$ligne =~ s/\n//g;
			$texte .= $ligne;
		    }
		    close(FILE);
		    $texte =~ s/> *</></g;
		    if ($texte=~ /<channel>.*?<title>([^>]+)<\/title>/) {
			my $rub=$1;
			$rub=~s/Le ?Monde.fr ?://g;
			$rub=~s/ ?: ?Toute l'actualitĂ© sur Le Monde.fr.//g;
			$rub=~s/\x{E8}/e/g;  # Ă¨
			$rub=~s/\x{E0}/a/g;  # Ă  
			$rub=~s/\x{E9}/e/g;  # Ă©
			$rub=~s/\x{C9}/e/g;  # Ă‰         
			$rub=~s/ //g;        
			$rub=uc($rub); # mise en majuscules
			$rub=~s/-LEMONDE.FR//g;  
			$rub=~s/:TOUTEL'ACTUALITESURLEMONDE.FR.//g;
			$rub=~s/LEMONDE.FR-ACTUALITE//g;
			$dictionnairesdesrubriques{$rub}++;
		    }
		}
		else {
		    #print "$file ==> $encodage \n";
		}
	    }
	}
    }
}

sub nettoyage {
    my $chainetrouvee=shift(@_);
	$chainetrouvee=~s/&#38;#39;/'/g;
	$chainetrouvee=~s/&#38;#34;/"/g;
	$chainetrouvee=~s/&#39;/'/g;
	$chainetrouvee=~s/&#34;/"/g;
	$chainetrouvee=~s/&#233;/é/g;
	$chainetrouvee=~s/&#234;/ę/g;
    $chainetrouvee=~s/&lt;.*?&gt;//g; 		
	return $chainetrouvee;
	
}

sub nettoyage2 {
    my $chainetrouvee=shift(@_);
	$chainetrouvee=~s/&#38;#39;/'/g;
	$chainetrouvee=~s/&#38;#34;/"/g;
	$chainetrouvee=~s/&#233;/é/g;
	$chainetrouvee=~s/&#234;/ę/g;
	$chainetrouvee=~s/&#39;/'/g;
	$chainetrouvee=~s/&#34;/"/g;
    $chainetrouvee=~s/&lt;.*?&gt;//g; 
	$chainetrouvee=~s/&amp;/ /g;
	$chainetrouvee=~s/&gt;/ /g; 
	return $chainetrouvee;
}

