#!/usr/bin/perl

#Le programme BAO3_extraction_relation est une solution vue en cours pour extraire des relations syntaxiques 
#-----------------------------------------------------------------------------------------------------------------------------------------------------------
#On a parcouru toute l'arborescence pour extraire uniquement les contenus textuels qui nous intéressent
#On a appliqué à ces contenus un étiquetage automatique (TreeTagger/UDpipe)
#ICI, on veut procéder à des extractions syntaxiques sur ces contenus (ici, relation de dépendance)
#-----------------------------------------------------------------------------------------------------------------------------------------------------------
#Entrée : fichier étiqueté UDpipe converti au format xml pour la rubrique étudiée + relation de dépendance à rechercher (ex. pour la relation objet "obj")
#Résultat : liste triée des couples GOV-DEP qui entretiennent la relation de dépendance recherchée
#-----------------------------------------------------------------------------------------------------------------------------------------------------------
#Commande pour lancer le programme : perl BAO3__extraction_relation.pl (fichier étiqueté UDpipe converti au format xml) (relation de dépendance à rechercher)
#Exemple pour la rubrique 3242 - culture et la dépendance objet : perl BAO3__extraction_relation.pl 2020-udpipe-regexp-3242.txt.xml "obj"
#-----------------------------------------------------------------------------------------------------------------------------------------------------------

use strict;
use utf8;
binmode STDOUT, ':utf8'; #Pour que tout ce qui sera affiché sur la sortie standard (écran) soit encodé en UTF-8

#On recupère dans des variables les paramètres passés par l'utilisateur en ligne de commande : nom du fichier UDpipe à parcourir et nom de la dépendance à rechercher
my $rep="$ARGV[0]";
my $relation="$ARGV[1]";

#On prépare un dictionnaire pour récupéré les gouverneurs et dépendants qui sont liés par la dépendance à rechercher
my %dicoRelation=();

#On découpe le texte en phrases : une liste d'items annotés et potentiellement dépendants
$/="</p>"; 			
open my $IN ,"<:encoding(utf8)","$ARGV[0]";
while (my $phrase=<$IN>) {
	#On traite chaque "paragraphe" en le découpant en "items"
	my @LIGNES=split(/\n/,$phrase);
	for (my $i=0;$i<=$#LIGNES;$i++) {
		#On vérifie que la ligne courante contient la relation recherchée, alors on récupère le gouverneur et son dépendant
		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;

			if ($posDep > $posGouv) { #Le gouverneur est placé avant son dépendant
				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 implémente le dictionnaire avec le gouverneur et son dépendant 
					}
				}
			}
			else {
				for (my $k=$i+1;$k<=$#LIGNES;$k++) { #Le gouverneur est placé après son dépendant
					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 implémente le dictionnaire avec le gouverneur et son dépendant 
					}
				}
			}
		}
	}
}
close ($IN);

#On sort la liste des couples gouverneur-dépendant en ajoutant leur fréquence d'apparition
foreach my $relation (sort {$dicoRelation{$b}<=>$dicoRelation{$a}} (keys %dicoRelation)) {
	print "$relation\t$dicoRelation{$relation}\n";
}
