#!/usr/bin/perl
<<DOC; 
Votre Nom : Bawden, Rachel 
MARS 2013
 usage : perl BAO3_rustique.pl repertoire_en_entree repertoire en sortie fichier_de_patrons
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter (fichiers textes étiquetés par Coridal) et un fichier txt contenant les patrons syntaxiques à extraire.
 Le programme produit en sortie une liste contenant les patrons pour chaque fichier du dossier fourni.
DOC


#====================================>
#	Initialisations et Déclarations
#====================================>
my $res=$ARGV[0];
my $dossier_de_sortie=$ARGV[1];
$res=~s/\/$//;
$dossier_de_sortie=~s/\/$//;
my $patron=$ARGV[2];
my @tokens=();
my @lemmes=();
my @categories=();

opendir(DIR, $res) or die "Erreur d'ouverture de repertoire: $!\n";
my @files_a_traiter = readdir(DIR);	
#print "FOUND : @files_a_traiter\n";
closedir(DIR);

foreach my $file(@files_a_traiter) # pour chaque fichier dans le dossier
{
	if ($file=~/(.+?)\.cnr$/)
	{
		my $filetxt=$1.".txt";
		print "Fichier : $file\n";

		open(FILE_IN, "<:encoding(iso-8859-1)", "$res/$file");

		while(my $line=<FILE_IN>)
		{
			if ($line!~/PCTFORTE/) # traitement jusqu'à une ponctuation forte
			{
				chomp($line);
				$line=~s/\r//;
				my @row=();
				@row=split("\t", $line); # liste (lemme, forme, catégorie) pour chaque mot
				
				push(@tokens, $row[0]);
				push(@lemmes, $row[1]);
				push(@categories, $row[2]);
			}
			
			else #quand on arrive à une ponctuation forte
			{
				
				#------ Traitement sur les tokens ------>
				&traiter_liste_categories($filetxt);
			
				#---- réinitialisation des tableaux ---->
				@tokens=();
				@lemmes=();
				@categories=();
			}
		}
	}
}

close(FILE_IN);

#====================================>
#	SUB : Traitement des catégories
#====================================>

sub traiter_liste_categories{

	$filetxt=shift;
	open(FILE_PATRONS, "<:encoding(iso-8859-1)", $patron);
	
	my $chaine_de_cats=join(" ",@categories); # faire un scalaire du  tableau de catégories afin de les comparer
	
	if (! -e "$dossier_de_sortie/$filetxt") #si la première fois qu'on rencontre cette rubrique
	{
		if (!open (FILEOUT,">:encoding(iso-8859-1)","$dossier_de_sortie/$filetxt"))
		{ 
			die "Probleme a l'ouverture du fichier : $dossier_de_sortie/$filetxt $!\n";
		}
	}
	else
	{
		if (!open (FILEOUT,">>:encoding(iso-8859-1)","$dossier_de_sortie/$filetxt"))
		{ 
			die "Probleme a l'ouverture du fichier : $dossier_de_sortie/$filetxt $!\n";
		}
	}
	while(my $line_patron=<FILE_PATRONS>) # pour chaque patron syntaxique
	{
		chomp($line_patron);
		$line_patron=~s/\r//g;
		
		my $compteur=0;
		while ($chaine_de_cats=~/$line_patron/g)
		{
			$compteur++;
			
			my $avant=$`;
			my $apres=$';
			my $nombre_de_separateurs_dans_patron=0;
			my $nombre_de_separateurs_dans_possible_match=0;
			
			
			while ($avant=~/ /g) # compter le nombre de séparateurs dans la liste de catégories à traiter
			{
				$nombre_de_separateurs_dans_possible_match++;
			}
			
			while ($line_patron=~/ /g) # compter le nombre de séparateurs dans le patron
			{
				$nombre_de_separateurs_dans_patron++;
			}
			
			
			
			#----------- Chercher les correspondances ---------->
			
			for (my $i=$nombre_de_separateurs_dans_possible_match; $i<=$nombre_de_separateurs_dans_possible_match+$nombre_de_separateurs_dans_patron; $i+=1)
			{
				print FILEOUT $tokens[$i], " ";
				
			}
			print FILEOUT "\n";
		}
	}
	close(FILE_PATRONS);
	close(FILEOUT);
}





