#!/usr/bin/perl
#----------------------------------------------------------------------------------
# Pour lancer le script dans le terminal: 
# perl bao3-p2.pl sortie-up-rubrique.xml "relation" > fichier_sortie.txt
# En entrée : sortie UDPIPE formatée en XML + une relation syntaxique
# En sortie la liste triée des couples Gouv,Dep en relation
#----------------------------------------------------------------------------------
use strict;
use utf8;
binmode STDOUT, ':utf8';
#-------------------------------------------------------------------------------------
#
# my $rep="$ARGV[0]";
#la relation à extraire est le deuxième argument
my $relation="$ARGV[1]";
#on crée une table de hachage pour y stocker les couples dépendant-gouverneur et leur fréquence
my %dicoRelation=();
#-------------------------------------------------------------------------------------
# on découpe le texte par phrase (liste d'items annotés et potentiellement dépendants)
$/="</p>";
#on ouvre le fichier d'entrée (premier argument)
open my $IN ,"<:encoding(utf8)","$ARGV[0]";
#tant qu'on n'a pas fini de lire le fichier
while (my $phrase=<$IN>) {
	#-------------------------------------------------------------------------------------
	# on traite chaque "paragraphe" en le decoupant sur "items" (grâce au retour à la ligne). La longueur de la liste est donc égale au nombre de tokens dans la phrase. 
	my @LIGNES=split(/\n/,$phrase);
	#on crée un indice qui sera incrémenté tant qu'il sera inférieur ou égal à la longueur de la liste LIGNES
	for (my $i=0;$i<=$#LIGNES;$i++) {
		# si la ligne lue contient la relation, on ira chercher le dep puis le gouv
		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) {
			#on stocke le POS du dep, le POS du gouv et la forme du dep
			my $posDep=$1;
			my $posGouv=$3;
			my $formeDep=$2;
			# on cherche maintenant la forme du gouv: soit il est avant le dep, soit il est après
			if ($posDep > $posGouv) {
				for (my $k=0;$k<$i;$k++) {
					#si la ligne k contient le POS du gouverneur dans sa première balise <a>
					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>/) {
						#on stocke la forme
						my $formeGouv=$1;
						#on ajoute la forme du gouverneur et du dépendant à la table de hachage
						$dicoRelation{"$formeGouv $formeDep"}++;
					}
				}
			}
			#idem si le gouverneur est après le dep
			else {
				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 ($IN);

# on imprime la liste des couples Gouv,Dep et leur fréquence...
foreach my $relation (sort {$dicoRelation{$b}<=>$dicoRelation{$a}} (keys %dicoRelation)) {
	print "$relation\t$dicoRelation{$relation}\n";
}
