#!/cygdrive/C/Strawberry/perl/bin
use strict;

<<DOC;
COURTIN Marine
cree le 03/05/2017
usage : perl script.pl repertoire-a-parcourir rubrique
sortie :
	- un fichier rubrique.xml avec l'etiquetage en POS et lemme des mots de chaque titre et description
	- un fichier rubrique.txt avec le titre et la description de chaque item
DOC

#--------------------- Verification des arguments ------------------------------

my $ChaineUsage="\nUtilisation: perl script.pl repertoire rubrique\n";
if (@ARGV!=2) {
 die $ChaineUsage;
}

#-------------------------- Programme principal --------------------------------

# 1. recuperation des arguments passes en lignes de commande
my ($directory, $rubrique) = @ARGV;
$directory =~ s/[\/]$//;

# 2. pour eviter les problèmes d'encodage...
my $encodage = 'utf-8';
binmode(STDIN,":$encodage");
binmode(STDOUT,":$encodage");


# 3. initilisation des sorties
my $output_directory = "SORTIES";
mkdir $output_directory;
open (my $txt, ">", ".\\$output_directory\\$rubrique.txt") || die "erreur a l'ouverture du fichier de sortie en .txt";
open (my $xml, ">", ".\\$output_directory\\$rubrique.xml") || die "erreur a l'ouverture du fichier de sortie en .xml";
print $xml "<?xml version=\"1.0\" encoding=\"$encodage\" ?>\n\n<PARCOURS>\n<NOM>Courtin Marine</NOM>\n<FILTRAGE>\n\n";

# 4. initlialisation des variables globales
my %titres;
my $i=1;

#------------- lancement de la fonction de parcours ---------------------------
&parcoursArborescenceFichiers($directory);
close $txt;
print $xml "\n</FILTRAGE>\n\n</PARCOURS>\n";
close $txt;
exit;
#----------------------- fin du programme --------------------------------------



#-------------------- fonctions crées ------------------------------------------

sub parcoursArborescenceFichiers {
	my $dir = shift(@_);
	opendir(my $path, $dir) || die "erreur a l'ouverture de $dir: $!";
	my @files = readdir($path);
	closedir($path);
	foreach my $file (@files) {
		next if $file =~ /^\.\.?$/;
		next if $file =~ /^\._/;
		$file = $dir."/".$file;
		if (-d $file) {
			&parcoursArborescenceFichiers($file)
		}
		if (-f $file) {
			if ($file =~ /$rubrique.+\.xml$/) {
				print $i++, "\t$file\n";
				open (my $input, "<", $file) || die "erreur a l'ouverture de $file : $!";
				print $xml "<file><name>$file<\/name><items>\n";
				my $texte="";
				while (my $ligne=<$input>) {
					chomp $ligne;
					$ligne =~ s/\r//g;
					$texte .= $ligne;
				}
				close $input;
				$texte =~ s/> +</></g;
				$texte =~ s/&#38;#39;/'/g;
				while ($texte =~ /<item>(?:<link>(?:.+?)<\/link>)?<title>(.+?)<\/title>(?:<link>(?:.+?)<\/link>)?<description>(.+?)<\/description>/g){
					my $titre=$1.".";
					my $description=$2;
					$description =~ s/&lt;.+?&gt;$//g;
					if (!(exists $titres{$titre})) {
						my ($titre_tagged, $description_tagged) = (&etiquetagePOS("titre", $titre), &etiquetagePOS("description",$description));
						print $txt $titre."\n".$description."\n\n";
						print $xml "<item><title>".$titre_tagged."<\/title><description>".$description_tagged."<\/description></item>";
						$titres{$titre}=1;
					}
				}
				print $xml "<\/items><\/file>\n"
			}
		}
	}
}



sub etiquetagePOS {
	my ($var, $contenu) = @_;

	# 1.1 stockage du titre|descrption dans un fichier temporaire
	open (my $tmp, ">", ".\\TMP\\$var.txt") || die "erreur a l'ouverture du fichier temporaire : $!";
	print $tmp $contenu;
	close $tmp;

	#1.2 tokenisation, etiquetage en POS, mise au format xml du fichier tagge
	system("perl tokenise-utf8.pl -f .\\TMP\\$var.txt | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > .\\TMP\\tagged_$var.txt");
	system("perl treetagger2xml-utf8.pl .\\TMP\\tagged_$var.txt utf8");

	# 1.4 concatenation de l'etiquetage pour un mm fichier
	open (my $tmp_tagged, "<", ".\\TMP\\tagged_$var.txt.xml") || die "erreur a l'ouverture du fichier temporaire : $!";
	my $t ="";
	while (my $ligne = <$tmp_tagged>) {
		chomp $ligne;
		next if $ligne =~ /<\?xml version="1.0" encoding="utf-8" standalone="no"\?>/;
		$ligne =~ s/\r//g;
		$t.=$ligne;
	}
	close $tmp_tagged;
	return $t;
}
