#MODE D'EMPLOI : perl bao3-extract-patron.pl fichier-ud.xml nom_relation > nom_fichier_sortie.txt
#!/usr/bin/perl
use strict;
use utf8;
binmode STDOUT, ':utf8'; # L'encodage pour la sortie

my $file="$ARGV[0]";	# Assignement des ARVG Pour les fichiers 
my $relation="$ARGV[1]";
my %dicoRelation=();	# Dictionnaire pour GOUV et DEP
$/="</p>";	# Desactiver la saut a la ligne
open my $input ,"<:encoding(utf8)",$file;	# Ouverture et lire le corpus etiqueté

while (my $phrase=<$input>) {	# Pour toutes les phrases d'input
	my @LIGNES=split(/\n/,$phrase);	# Séparer les phrases par saut lignes
	
	# Initialisation d'indice i qui va incrémenter à chaque tour de boucle
	for (my $i=0;$i<=$#LIGNES;$i++) {
		if ($LIGNES[$i]=~/<item><a>([^<]+)<\/a><a>([^<]+)<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>([^<]+)<\/a><a>[^<]*$relation[^<]*<\/a><a>[^<]+<\/a><a>[^<]+<\/a><\/item>/i) { 	# chercher des relations
			my $posDep=$1;	# $posDep va avoir l'indece dans la phrase
			my $posGouv=$3;		# $posGouv stock la position de GOUV dans la phrase.
			my $formeDep=$2;	# $formeDep stock la forme de DEP

			if ($posDep > $posGouv) {	# Verificaton si le GOUV est avant ou après
				for (my $k=0;$k<$i;$k++) {	# Initialisation d'indice k
					if ($LIGNES[$k]=~/<item><a>$posGouv<\/a><a>([^<]+)<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><\/item>/) { 	# Stock la position de GOUV
						my $formeGouv=$1;	# Stocker la forme du gouverneur dans $formeGouv.
						$dicoRelation{"$formeGouv $formeDep"}++;	# Stocker dans la dictionnaire
					}
				}
			}
			else {	# Sinon, le GOUV se trouve après le dépendant.
				for (my $k=$i+1;$k<=$#LIGNES;$k++) {
					if ($LIGNES[$k]=~/<item><a>$posGouv<\/a><a>([^<]+)<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><\/item>/) {
						my $formeGouv=$1;
						$dicoRelation{"$formeGouv $formeDep"}++;
					}
				}
			}
		}
	}
}
close ($input);		# Fermeture d'entrée.
foreach my $relation (sort {$dicoRelation{$b}<=>$dicoRelation{$a}} (keys %dicoRelation)) {	# Imprimer la liste des Gouv etDep et leur fréquence.
	print "$relation\t$dicoRelation{$relation}\n";
}
