#!/usr/bin/perl
<<DOC;
Votre Nom : Nidia Hernandez - Xianfan Zhang
MAI 2016
DOC
use XML::RSS;
#use Unicode::String qw(utf8);


##################################################
my $file="$ARGV[0]"; #flux d'entree
my $rubrique = "$ARGV[1]";

# Ce script ne produit pas de sortie txt

my $output1="$rubrique-surface-etiq-lib.xml"; # flux de sortie xml
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
print FILEOUT "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print FILEOUT "<PARCOURS>\n";
close (FILEOUT);
####################################################
$file=~ s/[\/]$//;
&parcoursfichier($file);
open (FILEOUT,">>:encoding(utf-8)", "$output1");
print FILEOUT "</PARCOURS>\n";
close (FILEOUT);
exit;
#################################################### SOUS-PROGRAMME PARCOURS
sub parcoursfichier{
    my $path = shift(@_);#on enleve le premier argument qu'on lit, parce que c'est un dossier mais pas fichier qu'on veut
    opendir(DIR, $path) or die "Could not open file $path: $!\n";
    my @contenuRep = readdir(DIR); 
    closedir(DIR);
    foreach my $fichier (@contenuRep) {
        next if $fichier =~ /^\.\.?$/; 
        $fichier = $path."/".$fichier; 
        if (-d $fichier) {
            print "<NOUVEAU REPERTOIRE> ==> ",$fichier,"\n";
            &parcoursfichier($fichier); 
            print "<FIN REPERTOIRE> ==> ",$fichier,"\n";
        }
        if (-f $fichier) {
        	if ($fichier=~/$rubrique.*.xml$/){ #CETTE LIGNE PEUT DONNER ERREUR S'IL Y A DES FICHIERS VIDES DANS L'ARBORESCENCE
        		print $fichier, "\n";
            	open (IN, "<:encoding(utf-8)", $fichier);
        		#open (OUT1, ">>:encoding(utf-8)", $output0);
            	open (OUT2, ">>:encoding(utf-8)", $output1);
            	print OUT2 "<file id=\"$fichier\">\n";
#-----------------------------------------------------------
            	my $ficher="$fichier";
            	my $rss=new XML::RSS; # nouvelle instance du module  
#-----------------------------------------------------------
            	$rss->parsefile($fichier);
            	my $nombredechampdescription=0;
            	foreach my $item (@{$rss->{'items'}}) { #pour chaque élément contenu dans <item>
                	$nombredechampdescription++;
                	my $title=$item->{'title'}; # on récupère le texte contenu dans <title>
                	$title.= ".";
                	my $description=$item->{'description'}; # on récupère le texte contenu dans <description>
                	$title=&nettoyage($title);
                	$description=&nettoyage($description);
                
                	if (!(exists $dico{$title})) {
						$dico{$title} = 1;
						my ($titletag, $descriptiontag) = &etiquetage($title, $description); # apres ça, les valeurs des variables $titre et $description sont deja etiquetées
                		print OUT2 "<item><title>$titletag</title><description>$descriptiontag</description></item>\n";
             	
             		}
            	}
        	
            print OUT2 "</file>\n";
            close (OUT2);
            close (IN);
            }
    	}
    }
}

#################################################### SOUS-PROGRAMME NETTOYAGE
sub nettoyage {
    my $description=shift;
    $description =~ s/&lt;/</g;
    $description =~ s/&gt;/>/g;
    $description =~ s/<a href[^>]+>//g;
    $description =~ s/<img[^>]+>//g;
    $description =~ s/<\/a>//g;
    $description=~ s/&#38;#39;/'/g;
    $description =~ s/&#38;#34;/"/g;
    $description =~ s/<[^>]+>//g;
    $description =~s/&#39;/\'/g;
    return $description
}

#################################################### SOUS-PROGRAMME ETIQUETAGE
sub etiquetage {
my ($t, $d) = @_; # Attribution des valeurs d'une liste a des variables

# traitement du titre
open(TMP, ">:encoding(utf8)", "titre.txt"); 
print TMP $t;
close TMP;
# Commande de tokenisation
system("perl tokenise-utf8.pl titre.txt | ./tree-tagger -token -lemma -no-unknown french-oral-utf-8.par  > titre_tag.txt");
# Commande d'etiquetage
system("perl treetagger2xml-utf8.pl titre_tag.txt utf8"); # resultat sur titre_tag.txt.xml
open(TMP2, "<:encoding(utf8)","titre_tag.txt.xml");
my $t_tag = "";
my $ligne= <TMP2>; # lecture 'pour rien' pour que la boucle lise a partir de la deuxieme ligne et comme ça on garde pas l'entete xml dans la variable de texte a etiqueter
while (my $ligne = <TMP2>) {
	chomp $ligne;
	$t_tag= $t_tag.$ligne;
	}
close TMP2;

# traitement de la description
open(TMP, ">:encoding(utf8)", "description.txt"); 
print TMP $d;
close TMP;
system("perl tokenise-utf8.pl description.txt | ./tree-tagger -token -lemma -no-unknown french-oral-utf-8.par > description_tag.txt");
# Commande d'etiquetage
system("perl treetagger2xml-utf8.pl description_tag.txt utf8");
open(TMP2, "<:encoding(utf8)","description_tag.txt.xml");
my $d_tag = "";
my $ligne= <TMP2>; 
while (my $ligne = <TMP2>) {
	chomp $ligne; 
	$d_tag= $d_tag.$ligne;
	}
close TMP2;

return($t_tag, $d_tag);
}
#----------------------------------------------