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

#--------------------------------------------------------------------------------------------------------------------------------------------------------
# SEGHIER Marina
# BAO3 "extraction de patrons" : recherche et extraction de termes sur les données étiquetées (les séquences NOM PREP NOM, NOM ADJ etc.) ou de relations de dépendances (cf Cours Documents Structurés)
#--------------------------------------------------------------------------------------------------------------------------------------------------------

# Pour lancer le script : perl bao3.pl corpus_3232.xml patron

#--------------------------------------------------------------------
my $fileatraiter=shift @ARGV; # on récupère les arguments
my @PATRON=@ARGV; # on stocke le reste des arguments dans une liste PATRON
open my $input, "<:encoding(utf-8)",$fileatraiter; # on ouvre le fichier à traiter
my @LISTE=<$input>; # on stocke le contenu dans une liste LISTE
close($input); # on ferme le fichier
while (my $ligne=shift @LISTE) { # boucle tant que
	my $terme=""; # alors on stocke le mot dans la variable terme
	if ($ligne=~/<element><data type="type">($PATRON[0](:\w+)?)<\/data><data type="lemma">[^<]+?<\/data><data type="string">([^<]+?)<\/data><\/element>/) { # si la ligne contenue dans $ligne correspond au premier du patron $PATRON[0]
		$terme=$terme.$1;
		my $longueur=1; # on définit la variable longueur comme valant 1
		my $indice=1; # on définit la variable indice comme valant 1
		# alors il faut que je lise autant de ligne qu'il y a dans le patron et tester chaque terme du patron...
		while (($LISTE[$indice-1]=~/<element><data type="type">$PATRON[$indice](:\w+)?<\/data><data type="lemma">[^<]+?<\/data><data type="string">([^<]+?)<\/data><\/element>/) and ($indice <= $#PATRON)) {
			$indice++;
			$terme.=" ".$2;
			$longueur++;
		}
		if ($longueur == $#PATRON + 1) { # si le patron est trouvé en entier
			$dicoPatron{$terme}++; # alors on le note dans le dico pour garder une trace de l'apparition
			$nbTerme++; # permet de conserver une trace du nombre de patrons
		}
	}	
}
open my $fileResu,">:encoding(UTF-8)","bao3-patron.txt"; # on ouvre le fichier de résultat
print $fileResu "$nbTerme éléments trouvés\n"; # on écrit dans le fichier le nombre total d'éléments trouvés
foreach my $patron (sort {$dicoPatron{$b} <=> $dicoPatron{$a} } keys %dicoPatron) { # pour chaque patron, on les compte et on les range par ordre décroissant
	print $fileResu "$dicoPatron{$patron}\t$patron\n"; # et on écrit le résultat
}
close($fileResu); # on ferme le fichier résultat