#######nettoyeur perl
##
##le programme se lance ainsi : se situer dans le dossier où est le programme, perl [programme] [dossier contenant les fichiers à traiter]
#temps d'execution: 12min15s
#! usr/bin/perl
use 5.018;
use XML::RSS;
use Encode qw (encode);
my %DICO=();
my %rubrique;
	$rubrique{Une}="0,2-3208,1-0,0.xml"; 
	$rubrique{International}="0,2-3210,1-0,0.xml";	
	$rubrique{Europe}="0,2-3214,1-0,0.xml";
	$rubrique{Societe}="0,2-3224,1-0,0.xml";
	$rubrique{Opinion}="0,2-3232,1-0,0.xml";
	$rubrique{Economie}="0,2-3234,1-0,0.xml";
	$rubrique{Media}="0,2-3236,1-0,0.xml";
	$rubrique{Rendez_vous}="0,2-3238,1-0,0.xml";
	$rubrique{Sports}="0,2-3242,1-0,0.xml";
	$rubrique{Science_et_Environnement}="0,2-3244,1-0,0.xml";
	$rubrique{Culture}="0,2-3246,1-0,0.xml";
	$rubrique{Livres}="0,2-3260,1-0,0.xml";
	$rubrique{Une_bis}="0,2-3404,1-0,0.xml";
	$rubrique{Cinema}="0,2-3476,1-0,0.xml";
	$rubrique{Voyages}="0,2-3546,1-0,0.xml";
	$rubrique{Technologie}="0,2-651865,1-0,0.xml";
	$rubrique{Politique}="0,57-0,64-823353,0.xml";
#création des dossiers et fichiers
#------------------------------------------------------------------------------------------------------------------
system("mkdir -p Sortie-XmlRss");
system("mkdir -p TaggedTree");  
#------------------------------------------------------------------------------------------------------------------
foreach my $rubric (keys(%rubrique)){
	open (OUT1,">>", "Sortie-XmlRss/".$rubric.".txt") or die "Error:$!";
	open (OUT2,">>", "Sortie-XmlRss/".$rubric.".xml") or die "Error:$!";

my $var = "$ARGV[0]";
&parcours($var,$rubrique{$rubric});


close OUT1;
close OUT2;
}
#ouverture des fichiers de texte taggé
foreach my $rubric (keys(%rubrique)){
	my $untagged="Sortie-XmlRss/".$rubric.".xml";
&treetagger($untagged,$rubric);
}
exit;

sub parcours
{	
	my $dossier=shift(@_);
	my $rub=shift(@_);
	opendir(Traitement,$dossier) or die $!;
	my @files = readdir(Traitement);
	for my $file (@files)
	{
		if ($file =~/^\.\.?$/) {next}
		my $file=$dossier."/".$file;
		if (-d $file) 
		{
			&parcours($file,$rub);
		}
		foreach (-f $file,$rub) 
		{
			if ($file=~m/\.xml$/){
				if ($file=~m/$rub/){
					&traitement($file,$rub);
				}
			}
		}
	}
}

sub nettoie {
	my ($texte)=shift;
		$texte=~s/&#38;#39;/'/g;
		$texte=~s/&#38;#34;/"/g;
		$texte=~s/&#233;/é/g;
		$texte=~s/&#234;/è/g;
		$texte=~s/&#39;/'/g;
		$texte=~s/&#34;/"/g;
		$texte=~s/&lt;/</g;
		$texte=~s/&gt;/>/g;
		$texte=~s/<a href[^>]+>//g;
		$texte=~s/<img[^>]+>//g;
		$texte=~s/<\/a>//g;
		$texte=~s/<[^>]+>//g;
		$texte=~s/&nbsp/ /g;
		$texte=~s/&/and/g;
	return $texte
};

sub traitement
{
	my $fichier=shift(@_);
	my $rss = new XML::RSS;
	eval {$rss->parsefile($fichier);};
	if ($@) {
		$@=~s/at \/.*?$//s;
		print $@ or die $!;
		say STDERR "Failed on '$fichier':\t$@";
	}	
	else { 
		my $fichier=encode('UTF-8', $fichier);
		my $date=$rss->{'channel'}->{'pubDate'};
		print OUT2 "\t<date>$date</date>\n"."<items>";
		foreach my $item (@{$rss->{'items'}}) {
			my $titre=$item->{'title'};
		if (exists($DICO{$titre})) {
						
 				}
		else{
			$titre=&nettoie($titre);
			my $titreiso=encode('ISO 8859-1', $titre);
			my $titreutf=encode('UTF-8', $titre);
			my $content=$item->{'description'};
			$content=&nettoie($content);
			my $contentiso=encode('ISO 8859-1', $content);
			my $contentutf=encode('UTF-8', $content);
			#------------------------------------------------------------------------------------------------------------------
            print OUT1 "\t$titreiso\.\n$contentiso\.\n";  
			#------------------------------------------------------------------------------------------------------------------
			print OUT2 "\t<item>"."\t<title>$titreutf</title>\n"."\t<abstract>$contentutf</abstract>\n</item>\n";
			}
		$DICO{$titre}++;
		}
	print OUT2 "</items>";
	}
}

############################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 > TaggedTree/Tagged_$rub.txt");
	system("perl5.18.2 Treetagger/cmd/treetagger2xml.pl TaggedTree/Tagged_$rub.txt");
}
############################
