#!/usr/bin/perl
#perl 文件.pl ../2019 3208
<<DOC; 
 usage : perl bao2_treetager_talismane.pl Path_de_fichier Rubrique
 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

DOC
#-----------------------------------------------------------


my $rep="$ARGV[0]";
my $rubrique = "$ARGV[1]";
chomp $rubrique;

# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;

#打开文档
open(OUT, ">:encoding(utf-8)", "sortie-slurp_$rubrique.txt");
open(OUTXML, ">:encoding(utf-8)", "sortie-slurp_$rubrique.xml");
open(OUTTALISMANE, ">:encoding(utf-8)", "sortietalismane-slurp_$rubrique.txt");

print OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print OUTXML "<corpus2019>\n";

my %dico_des_tires;
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print OUTXML "</corpus2019>\n";

close(OUT);
close(OUTXML);
close(OUTTALISMANE);
exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    #opendir 打开路径
    opendir(DIR, $path) or die "can't open $path: $!\n";
    # readir 读取路径
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
	next if $file =~ /^\.\.?$/;
	$file = $path."/".$file;
	if (-d $file) {
	    &parcoursarborescencefichiers($file);	#recurse!
	}
	if (-f $file) {
		if ($file =~/$rubrique.+?\.xml$/){
			print $i++," Traitement de : ",$file,"\n";
			open(FIC, "<:encoding(utf-8)", $file);
			$/=undef;
			my $texte=<FIC>;
			close(FIC);

			#1.initialisation du texte global
			my $titredescriptionGlobal="";
			$texte =~ s/\r?\n//g;
			while ($texte=~/<item>.*?<title>(.+?)<\/title>.+?<description>(.+?)<\/description>/sg)
			{
				my $title=$1;
				my $description=$2;

				if (!(exists $dico_des_tires {$title})){
					$dico_des_tires{$title}=$description;
					($title, $description)=&nettoyage($title,$description);
					$titredescriptionGlobal=$titredescriptionGlobal.$title."\n";
					$titredescriptionGlobal=$titredescriptionGlobal.$description."§\n";
					#étiquette
					my ($title_etiket, $description_etiket)=&etiquetage($title,$description);
					#sortie txt
					print OUT $title, "\n";
					print OUT $description, "\n";
					print OUT "-----------\n";

					#sortie xml
					print OUTXML "<item>\n";
					print OUTXML "<titre>", $title_etiket, "</titre>","\n";
					print OUTXML "<description>", $description_etiket, "</description>","\n";
					print OUTXML "</item>\n";

					#print sur le terminal
					print "TITRE : ", $title_etiket, "\n";
					print "DESCRIPTION : ", $description_etiket, "\n";
					print "-----------\n";
				}
			}
			open(TALIS_TEMP, ">:encoding(utf-8)", "bao1_test.txt");
			print TALIS_TEMP $titredescriptionGlobal;
			close(TALIS_TEMP);
			#2. lancer talismane sur $titredescriptionGlobal

			system 'java -Xmx1G -Dconfig.file=talismane/talismane-fr-5.2.0.conf -jar talismane/talismane-core-5.2.0.jar --analyse --sessionId=fr --encoding=UTF8 --inFile=bao1_test.txt --outFile=bao1_test.tal';

			#integrer le resultat de l'annotation précédente dans le fichier global talismane

			open(TEMP, "<:encoding(utf-8)", 'bao1_test.tal');
			$/=undef; 
			my $temp=<TEMP>;
			close(TEMP);
			print OUTTALISMANE $temp;
			}
    	}
	}
}

sub nettoyage {
	#my $titre_net=shift(@_);
	my $title=$_[0];
	my $description=$_[1];

	$title=~s/^<!\[CDATA\[//;
	$title=~s/\]\]>$//;
	$description=~s/^<!\[CDATA\[//;
	$description=~s/\]\]>$//;
	$title=~s/&#38;#34;/"/g;
	$title=~s/&lt;.+?&gt;//g; 
	$title=~s/&#38;#39;/'/g;

	$description=~s/&lt;.+?&gt;//g; 
	$description=~s/&#38;#39;/'/g;
	$description=~s/&#38;#34;/"/g;

	return $title,$description;
}

sub etiquetage {
	my $title=$_[0];
	my $description=$_[1];
	#mets dans un fichier
	open(ETI, ">:encoding(utf-8)", "temp.txt");
	print ETI $title;
	close(ETI);
	#lancer tree-tagger
	#fonction system
	system 'perl -f tokenise-utf8.pl temp.txt|tree-tagger -token -lemma -no-unknown /Users/meg/Documents/0_Inalco/03_cours/1_linguistique_de_corpus/treetagger/lib/french.par > temp_pos.txt';
	system 'perl treetagger2xml-utf8.pl temp_pos.txt utf-8';
	open(TEMP, "<:encoding(utf-8)",'temp_pos.txt.xml');
	$/=undef;
	my $titre_etik_xml=<TEMP>;

	#$titre_etik_xml =~s/<\?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"\?>//;
	$titre_etik_xml =~s/<\?xml[^>]+>//;
	close(TEMP);
	
	#description
	#mets dans un fichier
	open(ETI, ">:encoding(utf-8)", "temp.txt");
	print ETI $description;
	close(ETI);

	#lancer tree-tagger
	system 'perl -f tokenise-utf8.pl temp.txt| tree-tagger -token -lemma -no-unknown /Users/meg/Documents/0_Inalco/03_cours/1_linguistique_de_corpus/treetagger/lib/french.par > temp_pos.txt';
	#convertir en xml
	system 'perl treetagger2xml-utf8.pl temp_pos.txt utf-8';

	open(TEMP, "<:encoding(utf-8)",'temp_pos.txt.xml');
	$/=undef;
	my $description_etik_xml=<TEMP>;
	$description_etik_xml =~s/<\?xml[^>]+>//;
	close(TEMP);
	return $titre_etik_xml,$description_etik_xml;

}