#!/usr/bin/perl
#----------------------------------------------------------------------------------
# Ligne de commande : perl BAO3-relations.pl fichier_udpipe.xml relation
# Attention au chemin ! Le fichier résultat de udpipe fichier_udpipe.xml se trouve dans le dossier BAO2
# En entrée : sortie UDPIPE formatée en XML + une relation syntaxique
# En sortie la liste triée des couples (gouverneur, dépendant) en relation
#----------------------------------------------------------------------------------
use strict;
use utf8;
binmode STDOUT, ':utf8';
#-------------------------------------------------------------------------------------
my $fichier="$ARGV[0]";
my $rubrique = "";
if ($fichier=~/.*?-(\d+)\.udpipe\.xml$/){
	$rubrique = $1;
}
my $relation="$ARGV[1]";
my %dicoRelation=();
# on découpe le texte par phrase (liste d'items annotés et potentiellement dépendants)
$/="</p>"; 		
#-------------------------------------------------------------------------------------
open my $IN ,"<:encoding(utf8)",$fichier;
while (my $phrase=<$IN>) {
	# on traite chaque "paragraphe" (balises <p>) en le découpant par "items"
	my @LIGNES=split(/\n/,$phrase);
	for (my $i=0;$i<=$#LIGNES;$i++) {
		# si la ligne lue contient la relation, on ira chercher le dépendant 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;
			my $posGouv=$3;
			my $formeDep=$2;
			# soit le gouverneur est avant le dépendant, soit après
			# on fait donc les deux cas de figure :
			# si le gouverneur est avant le dépendant, on parcourt les lignes de 0 à l'endroit où on a trouvé le dépendant (exclu)
			if ($posGouv < $posDep) {
				for (my $k=0;$k<$i;$k++) {
					# On cherche la ligne du gouverneur selon son identifiant et on capture sa forme
					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;
						# On rajoute dans notre dictionnaire le couple gouverneur et dépendant trouvé
						$dicoRelation{"$formeGouv $formeDep"}++;
					}
				}
			}
			# si le gouverneur est après le dépendant alors on commence à la ligne suivante jusqu'à la dernière ligne de la phrase
			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;
						# On rajoute dans notre dictionnaire le couple gouverneur et dépendant trouvé
						$dicoRelation{"$formeGouv $formeDep"}++;
					}
				}
			}
		}
	}
}
close ($IN);
#-------------------------------------------------------------------------------------
# On ouvre et écrit dans notre fichier de résultat avant de le déplacer
open my $resultat,">:encoding(UTF-8)","perl-extract_relation-$rubrique-$relation.txt";
# On imprime la liste des couples gouverneurs et dépendants et selon leur fréquence, triée par ordre décroissant
foreach my $relation (sort {$dicoRelation{$b}<=>$dicoRelation{$a}} (keys %dicoRelation)) {
	print $resultat "$relation\t$dicoRelation{$relation}\n";
}
close($resultat);
move("perl-extract_relation-$rubrique-$relation.txt", "BAO3") or die "Erreur $!";
#-------------------------------------------------------------------------------------