#!/usr/bin/perl
#----------------------------------------------------------------------------------
# utilisation : perl bao3bisbis.pl corpus_titre-description.udpipe.xml "obj" > relations_obj.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]"; #le fichier udpipe à traiter (1er argument)
my $relation="$ARGV[1]"; #la relation à extraire (2eme argument)
my %dicoRelation=(); #dictionnaire pour le comptage
#-------------------------------------------------------------------------------------
# on découpe le texte par phrase (liste d'items annotés et potentiellement dépendants)
$/="</p>"; 			
open my $IN ,"<:encoding(utf8)","$ARGV[0]"; #on ouvre le fichier xml à traiter
while (my $phrase=<$IN>) {
	# on traite chaque "paragraphe" en le decoupant en "items"
	my @LIGNES=split(/\n/,$phrase);
	for (my $i=0;$i<=$#LIGNES;$i++) {
		# si la ligne lue contient la relation, on ira chercher le dependant puis le gouverneur
		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) {
			my $posDep=$1; #id du dépendant
			my $posGouv=$3; #id du gouverneur
			my $formeDep=$2; #forme du mot qui est dépendant
			# affichage selon que le gouv soit avant le dependant, soit après
			if ($posDep > $posGouv) { #si le dépendant est après le gouverneur
				for (my $k=0;$k<$i;$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"}++; #on ajoute dans le dictionnaire le gouverneur puis lui dépendant
					}
				}
			}
			else { #sinon on affiche d'abord le dépendant puis le gouverneur
				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 ferme le fichier
# on print la liste des couples Gouv,Dep et leur fréquence en faisant une boucle dans le dictionnaire
foreach my $relation (sort {$dicoRelation{$b}<=>$dicoRelation{$a}} (keys %dicoRelation)) {
	print "$relation\t$dicoRelation{$relation}\n";
}
