#!/usr/bin/perl
use strict;
use utf8;
binmode STDOUT, ':utf8';

# Utilisation du programme :
# perl bao3-relation-UD.pl fichier_annoté_udpipe relation
# exemple : perl bao3-relation-UD.pl bao2_UD_pl_3246.udpipe.xml obj

# -------------------------------------------------------------------------------

# RECUPERATION DES ARGUMENTS DONNES AU PROGRAMME
my $rep="$ARGV[0]";
my $relation="$ARGV[1]";

# EXTRACTION DE LA RELATION
my %dicoRelation=();
$/="</p>"; # on découpe le texte par phrase
open my $IN ,"<:encoding(utf8)","$ARGV[0]"; # ouverture du fichier à traiter
while (my $phrase=<$IN>) { # pour chaque phrase
	my @LIGNES=split(/\n/,$phrase); # on découpe les phrases par lignes
	for (my $i=0;$i<=$#LIGNES;$i++) { # pour chaque ligne
		# si la ligne lue contient la relation
		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; # récupération de la position du dépendant
			my $posGouv=$3; # récupération de la position du gouverneur
			my $formeDep=$2; # récupération du dépendant
			if ($posDep > $posGouv) { # si le gouverneur est avant le dépendant
				for (my $k=0;$k<$i;$k++) { # pour chaque ligne avant celle du dépendant
					# si elle contient la position du gouverneur
					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; # récupération du gouverneur
						$dicoRelation{"$formeGouv -> $formeDep"}++; # on ajoute le couple dans le dictionnaire
					}
				}
			}
			else { # si le gouverneur est après le dépendant
				for (my $k=$i+1;$k<=$#LIGNES;$k++) { # pour chaque ligne après celle du dépendant
					# si elle contient la position du gouverneur
					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; # récupération du gouverneur
						$dicoRelation{"$formeGouv -> $formeDep"}++; # on ajoute le couple dans le dictionnaire
					}
				}
			}
		}
	}
}
close ($IN);

# ECRITURE DANS LE FICHIER OUTPUT
open my $output,">:encoding(UTF-8)","extraction-UD-relation_pl_$relation.txt"; # ouverture du fichier output
print $output "RELATION : $relation\n"; # écriture de la relation
foreach my $relation (sort {$dicoRelation{$b}<=>$dicoRelation{$a}} (keys %dicoRelation)) { # comptage de la fréquence de chaque couple
	print $output "$dicoRelation{$relation}\t$relation\n"; # écriture de chaque couple unique et sa fréquence
}
close($output);