#!/usr/bin/perl

<<DOC; 
Axel COURT & Marjorie SEIZOU
AVRIL 2010
 usage : perl genererpatrons.pl <fichier>
 
DOC

# Test des paramètres
if ($#ARGV != 0) {
    print "Syntaxe : perl genererpatrons.pl <fichier>\n" ;
    exit(-1);
}

#--------------------------------------------
# Ouverture des fichiers en lecture
#--------------------------------------------
open (FIC, "<:encoding(iso-8859-1)", $ARGV[0]) or die ("Impossible d'ouvrir le fichier d'entrée : $!\n");

&formatage;

exit;

# ------------------------
# Procédures
# ------------------------
sub formatage {

	my %contenu;
	my @fichier = ();
	my $patroncourant = "";
	my $programme = "";
	
	if ($ARGV[0] =~ /.*?Cordial.*?/) {
		$programme = "Cordial";
	}
	elsif ($ARGV[0] =~ /.*?TreeTagger.*?/) {
		$programme = "TreeTagger";
	}
		
	while ($ligne = <FIC>) {
		# Lecture du fichier dans un tableau
		if ($ligne !~ /^\s*$/) {
			chomp($ligne);
			push(@fichier, $ligne);
		}
	}
	close(FIC);
	
	if ($programme =~ /TreeTagger/) {
		my $ligne = shift(@fichier);
		my $i = 0;
		my $j = $#fichier;
		while ($i <= $j) {
			# On initialise des listes de hash pour chaque patron dans le fichier TreeTagger si on tombe sur des "-----" indiquant une entête de patrons
			if ($ligne =~ /^-+$/) {
				$ligne = shift(@fichier);
				$patroncourant = $ligne;
				$patroncourant =~ s/PRP:det/PRP/g;
				if (not exists($contenu{$patroncourant})) {
					$contenu{$patroncourant} = ();
				}
				$ligne = shift(@fichier);
				$ligne = shift(@fichier);
				$i = $i+3;
			}
			# Sinon, c'est qu'on a des résultats d'extraction -> on garnit le tableau de hash correspondant avec
			else {
				push(@{$contenu{$patroncourant}},$ligne);
				$ligne = shift(@fichier);
				$i++;
			}
		}
	}
		
	else {
		my $ligne = shift(@fichier);
		my $i = 0;
		my $j = $#fichier;
		my $patroncourant = "";
		while ($i <= $j) {
			# On initialise des listes de hash pour chaque patron dans le fichier Cordial si on tombe sur des "-----" indiquant une entête de patrons
			if ($ligne =~ /^-+$/) {
				$ligne = shift(@fichier);
				$patroncourant = $ligne;
				&formatecordial($patroncourant);
				if (not exists($contenu{$patroncourant})) {
					$contenu{$patroncourant} = ();
				}
				$ligne = shift(@fichier);
				$ligne = shift(@fichier);
				$i = $i+3;
			}
			# Sinon, c'est qu'on a des résultats d'extraction -> on garnit le tableau de hash correspondant avec
			else {
				push(@{$contenu{$patroncourant}},$ligne);
				$ligne = shift(@fichier);
				$i++;
			}
		}
	}
	
	while ( ($key, $value) = each(%contenu) ) {
		open (OUT, ">:encoding(iso-8859-1)", "$key.txt") or die ("Impossible d'ouvrir le fichier de sortie : $!\n");
		my @tree = @$value;
		foreach $valeur (@tree) {
			print OUT $valeur."\n";
		}
		close(OUT);
	}
	
}

sub formatecordial {
	
	$_[0] =~ s/NC\w+/NOM/g;
	$_[0] =~ s/ADJ\w+/ADJ/g;
	$_[0] =~ s/PREP/PRP/g;
	return $_[0];
		
}