#/usr/bin/perl
<<DOC; 
JANVIER 2018
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter
DOC
#-----------------------------------------------------------
use XML::RSS;
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";

open(OUT,">:encoding(utf8)","Bao2_$rubrique.txt");
#close OUT;
open(OUTXML,">:encoding(utf8)","Bao2_$rubrique.xml");
print OUTXML "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 
#print OUTXML "<!DOCTYPE note\n[<!ELEMENT TITRE (#PCDATA)>\n<!ELEMENT DESCRIPTION (#PCDATA)>\n]>";
print OUTXML "<racine>";
#close OUTXML;
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
my %hashtag;
#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera après examen de toute l'arborescence
close OUT;
print OUTXML "</racine>";
close OUTXML;
#----------------------------------------
exit;
#----------------------------------------------
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) {
			print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	#recurse!
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		if (-f $file) {
			#       TRAITEMENT à réaliser sur chaque fichier
			#       Insérer ici votre code (le filtreur)
			if ($file =~ /\.xml$/ and $file =~ /$rubrique/){
				my $rss=new XML::RSS;
				eval {$rss->parsefile($file); };
				if( $@ ) {
    					$@ =~ s/at \/.*?$//s;               # remove module line number
    					print STDERR "\nERROR in '$file':\n$@\n";
				} 
				else {
     					foreach my $item (@{$rss->{'items'}}) {
					my $description=$item->{'description'};
					my $titre=$item->{'title'};
					$titre=~s/<[^>]+>//g;
					$description=~s/<[^>]+>//g;
					if(!exists $hashtag{$titre}){ 
						$hashtag{$titre}=1;
						my $titre0=&nettoyage($titre);
						my $description0=&nettoyage($description);
						print OUT "$titre0.\n";
						print OUT "$description0\n\n";
						my($titre_, $description_)=&etiquetage($titre0,$description0);
						print OUTXML "<item><TITRE>$titre_</TITRE><DESCRIPTION>$description_</DESCRIPTION></item>\n";
						

						}
					}
				}
				
			}
			
			#print "<",$i++,"> ==> ",$file,"\n";
		}
    }
}


sub etiquetage{
	my $var1=shift(@_);
	my $var2=shift(@_);
	open(OM,">:encoding(utf8)","01.txt");
	print OM "$var1";
	close OM;
	open(OK,">:encoding(utf8)","02.txt");
	print OK "$var2";
	close OK;
	system("perl ../treetagger/tokenise-utf8.pl 01.txt > m");
	system("perl ../treetagger/tokenise-utf8.pl 02.txt > n");
	system("../treetagger/bin/tree-tagger -token -lemma -no-unknown ../treetagger/lib/french-utf8.par m > m1");
	system("../treetagger/bin/tree-tagger -token -lemma -no-unknown ../treetagger/lib/french-utf8.par n > n1");
	system("perl ../treetagger/treetagger2xml-utf8.pl m1 utf8");
	system("perl ../treetagger/treetagger2xml-utf8.pl n1 utf8");
	open(OM, "<:encoding(utf8)","m1.xml");
	local $/=undef;
	$total=<OM>;
	$total =~ s/<\?xml version="1.0" encoding="utf-8" standalone="no"\?>\n//g;
	print "$total\n";
	close OM;
	open(OK,"<:encoding(utf8)","n1.xml");
	local $/=undef;
	$total1=<OK>;
	$total1 =~ s/<\?xml version="1.0" encoding="utf-8" standalone="no"\?>\n//g;
	close OK;
	return $total, $total1;
	

	

}

sub nettoyage {
	my $v=shift;
	$v =~ s/&lt;.+?&gt;//g;
	$v=~s/&amp;/et/g;
	$v=~s/amp;/et/g;
	$v=~s/&/et/g;
	return $v;
}










































#----------------------------------------------
