#!/usr/bin/perl

<<DOC; 
Noms : PHOMMADY Elodie & AOUES Nora
Usage : perl ./BAO3/Perl/BAO3_ExtractionDep_UDPipe.pl numero_rubrique "relation_dep"
    Le programme doit être lancé en se plaçant sur le repertoire de travail ProjetEncadre.
    En entrée : numéro de rubrique correspondant à sortie UDPIPE formatée en XML + une relation syntaxique
    En sortie la liste triée des couples Gouv,Dep en relation
DOC


#***********************************************************
#**************** PROGRAMME PRINCIPAL **********************

#-----------------------------------------------------------
# UTILISATION DE BILIOTHEQUES 

use strict;
use utf8;
binmode STDOUT, ':utf8';

#-----------------------------------------------------------
# RECUPERATION DES ARGUMENTS 

my $rubrique="$ARGV[0]";
my $relation="$ARGV[1]";

#-----------------------------------------------------------
# EXTRACTION DES RELATIONS DE DEPENDANCE 

# Création de la table de hashage qui va contenir tous les couples GOUV/DEP
my %dicoRelation=();


$/="</p>"; # Changement de la méthode de lecteure par défaut de Perl

# Ouverture du fichier en entrée
open my $input ,"<:encoding(utf8)", "./Resultats/Sorties_BAO2/sortieudpipe-slurp_$rubrique.txt.xml";

# Ouverture du fichier de sortie
open my $output, ">:encoding(utf8)", "./Resultats/Sorties_BAO3_Perl/Sorties_relationDep/sortieudpipe-relationDep-obj_$rubrique.txt";

# Lecture du fichier phrase par phrase (liste d'items annotés et potentiellement dépendants)
while (my $phrase=<$input>) {
	
	# Traitement de chaque "paragraphe" : Découper la phrase en lignes
	my @LIGNES=split(/\n/,$phrase);
	
	# Pour chaque ligne de la phrase
	for (my $i=0;$i<=$#LIGNES;$i++) {
		
		# Vérification : La ligne lue contient la relation recherchée
		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) {
			
			# Récupération de la position + la forme du dépendant et de la position du gouverneur
			my $positionDep=$1;
			my $positionGouv=$3;
			my $formeDep=$2;
			
			# Cas n°1 : Le gouverneur est avant le dépendant
			if ($positionDep > $positionGouv) {
				# On se déplace entre l'indice 0 et l'indice de dépendant 
				for (my $k=0;$k<$i;$k++) {
					if ($LIGNES[$k]=~/<item><a>$positionGouv<\/a><a>([^<]+)<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><\/item>/) {
						# Récupération de la forme du gouverneur
						my $formeGouv=$1;
						# Sauvegarde du couple GOUV/DEP dans la table de hashage prévue à cet effet
						# (+ incrémentation de sa fréquence) 
						$dicoRelation{"$formeGouv $formeDep"}++;
					}
				}
			}
			# Cas n°2 : Le gouverneur est après le dépendant
			else {
				# On se déplace entre l'indice de dépendant et la fin
				for (my $k=$i+1;$k<=$#LIGNES;$k++) {
					if ($LIGNES[$k]=~/<item><a>$positionGouv<\/a><a>([^<]+)<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><a>[^<]+<\/a><\/item>/) {
						# Récupération de la forme du gouverneur
						my $formeGouv=$1;
						# Sauvegarde du couple GOUV/DEP dans la table de hashage prévue à cet effet
						# (+ incrémentation de sa fréquence) 
						$dicoRelation{"$formeGouv $formeDep"}++;
					}
				}
			}
		}
	}
}

close $input;

#-----------------------------------------------------------
# IMPRIMER LA LISTE DES COUPLES GOUV/DEP PAR ORDRE DE FREQUENCE DECROISSANT

foreach my $relation (sort {$dicoRelation{$b}<=>$dicoRelation{$a}} (keys %dicoRelation)) {
	print $output "$relation : $dicoRelation{$relation}\n";
}

#-----------------------------------------------------------
# FERMETURE DU FICHIER DE SORTIE 

close $output;
