#/usr/bin/perl 
<<DOC; 
Votre Nom : BELLATO Sandra
2016-2017
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter
 Le programme construit en sortie un fichier structuré contenant sur chaque
 ligne le nom du fichier et le résultat du filtrage :
<FICHIER><NOM>du fichier</NOM></FICHIER><CONTENU>du filtrage</CONTENU></FICHIER>
DOC

#----------------------------------------------------------- 

my $rep=$ARGV[0]; 
my $rubrique =$ARGV[1]; 
my %dico; 
# on s'assure que le nom du répertoire ne se termine pas par un "/" 
$rep=~ s/[\/]$//; 
# on initialise une variable contenant le flux de sortie 
my @listedesitems=();

#---------------------------------------- 

my $output0="$rubrique.txt"; 
if (!open (FILEOUT,">$output0")) { die "Pb a l'ouverture du fichier $output0"}; 
close(FILEOUT); 
my $output1="$rubrique.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"; 
print FILEOUT "<NOM>BELLATO Sandra</NOM>\n"; 
print FILEOUT "<FILTRAGE>\n";
close (FILEOUT); 

#---------------------------------------- 

&parcoursarborescencefichiers($rep);	
# on lance la récursion.... et elle se terminera aprés examen de toute l'arborescence 

#---------------------------------------- 

open (FILEOUT,">>:encoding(utf-8)", $output1); 
print FILEOUT "</FILTRAGE>\n"; 
print FILEOUT "</PARCOURS>\n"; 
close(FILEOUT); 


#---------------------------------------- 

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 =~ /^\.\.?$/; 
		next if $file =~ /^\._/; 
		next if $file =~ /^fil/;
		$file = $path."/".$file;
		if (-d $file) {
			print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
			}
		if (-f $file) {
			if ($file=~/$rubrique.+\.xml$/){
				print "<",$i++,"> ==> ",$file,"\n";
				$codage="utf-8";
				open (FIC, "<:encoding($codage)", $file);
				open (OUT1, ">>:encoding($codage)", "$rubrique.txt"); 
				open (OUT2, ">>:encoding($codage)", "$rubrique.xml");
				my $texte = "";
				while (my $ligne=<FIC>) {
					chomp $ligne; 
					$ligne=~s/\r//g; 
					$texte=$texte.$ligne; 
					}
					$texte =~ s/> +</></g;
					$texte =~ s/&#38;/'/g;
					$texte =~ s/&#39;/'/g;
					$texte=~ s/&lt;/</g;
					$texte=~ s/&gt;/>/g;
					$texte=~ s/&amp;/and/g;
					while ($texte =~ /<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description>/g){
					my $titre=$1;
					my $description=$2;
					$description =~s/<[^>]+?>//g;
					unless (grep {$_ eq $titre}@listedesitems){
						push @listedesitems, $titre ;
						print OUT1 "$titre.\n"; # on imprime le titre
						print OUT1 "$description\n\n"; # on imprime la description
						print OUT2 "<item><titre>$titre.</titre><description>$description</description></item>\n";	
						&etiquetage($titre, $description);
						}
					}
				close FIC; 
				close OUT1; 
				close OUT2; 
				}
			}	
		}
	}
	
#---------------------------------------------- 

sub etiquetage {
	my $titre1 = shift(@_); 
	my $description1 = shift(@_);
	open(TMP,">>:encoding(utf-8)","titre.txt"); 
	print TMP "$titre1.\n"; 
	close TMP; 
	system ("perl tokenise-utf8.pl titre.txt | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > titre_tag.txt"); 
	system ("perl treetagger2xml-utf8.pl titre_tag.txt utf-8");
	open(TMP2, "<:encoding(utf8)","titre_tag.txt.xml"); 
	my $t_tag=""; 
	my $ligne = ""; 
	while (my $ligne = "") { 
		chomp $ligne; 
		$t_tag = $t_tag . $ligne; 
		} 
	close TMP2; 
	open(TMP,">>:encoding(utf-8)","description.txt"); 
	print TMP "$description1\n"; 
	close TMP; 
	system ("perl tokenise-utf8.pl description.txt | tree-tagger.exe -token -lemma -no-unknown french-utf8.par > description_tag.txt"); 
	system ("perl treetagger2xml-utf8.pl description_tag.txt utf-8");
	open(TMP2, "<:encoding(utf8)","description_tag.txt.xml"); 
	my $d_tag=""; 
	my $ligne = ""; 
	while (my $ligne = "") { 
		chomp $ligne; 
		$d_tag = $d_tag . $ligne;
		} 
	close TMP2; 
	return($t_tag,$d_tag); 
	} 
	
#----------------------------------------------

