#!/usr/bin/perl
use strict;
<<DOC; 
Votre Nom : Bawden, Rachel 
MARS 2013
 usage : perl BAO3_rustique.pl repertoire_en_entree dossier_de_sortie fichier_de_patrons
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter (fichiers textes étiquetées par Coridal) et un fichier txt contenant les patrons syntaxiques à extraire.
 Le programme produit en sortie...
DOC

die "Usage: $0 DossierEnEntree DossierDeSortie FichierDePatrons\n
Le programme prend en argument un dossier en entree, un dossier en sortie et un fichier de patrons .\n\n" if (@ARGV < 3);

#====================================>
#	Initialisations et Déclarations
#====================================>

my @phrase=();
my $compteur=0;
my $res=$ARGV[0];
my $dossier_de_sortie=$ARGV[1];
my $patron=$ARGV[2];
$dossier_de_sortie=~s/\/$//;
$res=~s/\/$//;

opendir(DIR, $res) or die "Erreur d'ouverture de repertoire: $!\n";
my @files_a_traiter = readdir(DIR);	
closedir(DIR);
foreach my $file(@files_a_traiter) # pour chaque fichier dans le dossier
{
	if ($file=~/(.+?)\.cnr$/)
	{
		print $file;
		my $filetxt=$1.".txt";
		open(FILE_IN, "<:encoding(iso-8859-1)", "$res/$file");
		
		if (!open (FILEOUT,">:encoding(iso-8859-1)","$dossier_de_sortie/$filetxt"))
		{ 
			die "Probleme a l'ouverture du fichier : $dossier_de_sortie/$filetxt $!\n";
		}
		close(FILEOUT);
		
		while(my $line=<FILE_IN>)
		{
			if ($line!~/PCTFORTE/) # traitement jusqu'à une ponctuation forte
				{
					chomp($line);
					$line=~s/\r//;
					push(@phrase, $line);
					$compteur++;
				}
				else #quand on arrive à une ponctuation forte
				{
					#------ Traitement sur les tokens ------>
					&traiter_liste_categories($filetxt);

					#---- réinitialisation des tableaux ---->
					@phrase=();
					$compteur=0;
				}
		}
		close(FILE_IN);
	}
}

#====================================>
#	SUB : Traitement des catégories
#====================================>

sub traiter_liste_categories
{
	my $file_a_creer=shift;
	
	if (!open (FILEOUT,">>:encoding(iso-8859-1)","$dossier_de_sortie/$file_a_creer")) { 
		die "Probleme a l'ouverture du fichier $dossier_de_sortie/$file_a_creer : $!\n";
	}
	open(FILE_PATRONS, "<:encoding(iso-8859-1)", $patron);
	while(my $line_patron=<FILE_PATRONS>) # pour chaque patron syntaxique
	{
		chomp($line_patron);
		$line_patron=~s/\r//g;
		
		my @patron=split(" ",$line_patron);
		my $patron_size = $#patron+1;
		my $found=1;
		my $result="";
		
		for (my $i=0; $i<$compteur; $i+=1)
		{
			if ($i+$patron_size<=$compteur) #si il sera possible de trouver le patron à partir de l'endroit actuel
			{	
				my $k=$i;
				$found=-1;
				for (my $j=0; ($j<$patron_size) && ($found!=0); $j+=1) #pour chaque élément dans le patron
				{
					if ($found==-1)
						{
							$found=0;
						}
					if ($phrase[$k]=~/(.+?)\t(.+?)\t$patron[$j]/)
					{
						$result=$result." ".$1;
						
						$found++;
						$k++;
						
						if ($found==$patron_size)
						{
							#print "$result\n";
							print FILEOUT "$result\n";
						}	
					}
					else
					{
						$result="";
						$found=0;
						$k++;
					}
				}
			}
		}
	}
	close(FILE_PATRONS);
	close(FILEOUT);
}

