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

#use strict;
use XML::RSS;
use Unicode::String qw(utf8);
#----------------------bon script xml--------------------------------------------------------------------------------------------
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";
		#-------------------traitement de fichier rubrique---------------------------------------
	    if ($encodage ne "") {
		#------------------module xml rss--------------------------------------------------------
		    my $rss=new XML::RSS;
			eval {$rss->parsefile($file); };
            if( $@ ) {
                   $@ =~ s/at \/.*?$//s;              
                   print STDERR "\nERROR in '$file':\n$@\n";
                } 
            $rss->parsefile($file);
		    print "Extraction dans : $file \n";
			my $canal = $rss->{'channel'};
			my $rub=$canal->{'title'};
			$rub=&nettoyagerub($rub);
		    print "RUBRIQUE : $rub\n";
			my $date=$canal->{'pubDate'};
			
		    my $tmptexteXML="<file>\n";
		    $tmptexteXML.="<name>$file</name>\n";
			$tmptexteXML.="<date>$date</date>\n";
		    $tmptexteXML.="<items>\n";
			
		    my $tmptexteXMLtagger="<file>\n";
		    $tmptexteXMLtagger.="<name>$file</name>\n";
			$tmptexteXMLtagger.="<date>$date</date>\n";
		    $tmptexteXMLtagger.="<items>\n";

     		my $tmptexteBRUT="";
			print $rub;
			#----------------v¨¦rifier si le fichier sortir existe, s'il sexiste pas, on en cr¨¦¨¦ un pour lui----------------------------------------------------------------------------------------------
		    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"};
		    #---------------------------------------------------------------------------------------------------------------
		    #les compteurs
   		    my $cpt=0;
		    my $compteurEtiquetage=0;
			#----------------------------------------------
			foreach my $item (@{$rss->{'items'}}) {
				my $description=$item->{'description'};
				my $title = $item->{'title'};
				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);
			            #print "$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)=@_;
	#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 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/&#252;/¨¹/g;
	$chainetrouvee=~s/&#226;/a/g;
	$chainetrouvee=~s/&#239;/?/g;
	$chainetrouvee=~s/&#237;/?/g;
    $chainetrouvee=~s/&lt;.*?&gt;//g;
	$chainetrouvee=~s/<.+>//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
}