#!/usr/bin/perl
<<DOC; 
Votre Nom : Chunxiao YAN 
 mars 2015
 usage : perl 2015BAO2exrg.pl repertoire-a-parcourir
DOC

use Unicode::String qw(utf8);

#----------------------bon script par rub ----------------------------------------
my $rep="$ARGV[0]";
$rep=~ s/[\/]$//;  

my $repsortie=$ARGV[1];
print $repsortie;
mkdir($repsortie) or die ("Probleme avec la creation du repertoire de $repsortie, verifier s'il en existe deja une");

my %dicTitle=();
my %dicDescription=();
my %dicrubriques=();
#----------------------------------------
&parcoursarborescencefichiers($rep);	# traitement de tous les fichiers 

opendir(DIR, $repsortie) or die "probleme d'ouverture de repertoire: $!\n";
my @listefichiers = readdir(DIR);
closedir(DIR);
foreach my $fichier (@listefichiers) {
    if ($fichier=~/\.xml$/) {
	if (!open (FILE,">>:encoding(utf-8)",$repsortie."\\".$fichier)) { die "Pb a l'ouverture du fichier $output1"};
    print FILE "</PARCOURS>\n";
    close(FILE);
	}    
}
exit;
#-----------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=~/\.xml$/) && ($file!~/\/fil.+\.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;
		#-------------------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;
		    # on recherche la rubrique
		    $chainecomplete=~/<channel>.*?<title>([^<]+)<\/title>/;
		    my $rub=$1;
            $rub=&nettoyagerub($rub);
		    print "RUBRIQUE : $rub\n";
		    #---------------------------------------------------------------------------------------------------
		    my $output1=$repsortie."/SORTIE-extract-txt-".$rub.".xml";
		    my $output2=$repsortie."/SORTIE-extract-txt-".$rub.".txt";
		    my $output3=$repsortie."/SORTIE-extract-txt-".$rub."-treetagger.xml";
			if ( -e $output1) {
			    print "exsite: $rub";   
			}
			else {
			&fichiersortie($rub);
			}
		    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) {
		    my $title=$1; 
		    my $description=$2;
			if (uc($encodage) ne "UTF8") {
				      print "changement en utf8\n";
			            utf8($title);
			            utf8($description);
			        }
            if (!(exists $dicTitle{$title})){
                        $cpt++;			
					    $dicTitle{$title}++;
					    $dicDescription{$description}++;
			            $compteurEtiquetage++;
				#--------------nettoyage-------------------
				        print "nettoyage";
				        $title=&nettoyage($title);
		                $description=&nettoyage($description);
				        print "ettiquetage";
				#----------ettiquetage de titre et de decscription------------------
				        ($titletag,$descriptiontag)=&ettiquetage($title,$description);
				#-------------------------------------------------	
                        $tmptexteBRUT.="§ $title \n";						
			            $tmptexteBRUT.="$description \n";
			            $tmptexteXML.="<item num=\"$cpt\"><title>$title</title><abstract>$description</abstract></item>\n";
			            $tmptexteXMLtagger.="<item num=\"$cpt\">\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 fichiersortie {
    my $rub=shift(@_);
    my $output1=$repsortie."/SORTIE-extract-txt-".$rub.".xml";
    my $output2=$repsortie."/SORTIE-extract-txt-".$rub.".txt";
    my $output3=$repsortie."/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);

}

sub ettiquetage {
    my ($title,$texte)=@_;
    #---------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 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;
	$chainetrouvee=~s/&amp;/&/g;
	$chainetrouvee=~s/&gt;/&/g; 
	return $chainetrouvee;	
}

sub nettoyagerub {
    my $rub=shift(@_);
		$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;
	return $rub
}