#!/usr/bin/perl

#Le programme BAO3_extraction_patrons est une solution vue en cours pour extraire des patrons 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, patron syntaxique = suite de POS)
#-----------------------------------------------------------------------------------------------------------------------------------------------------------
#Entrée : fichier étiqueté UDpipe au format txt - ConLL pour la rubrique étudiée + fichiers contenant les patrons syntaxiques (patrons.txt)
#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_patrons.pl (fichier étiqueté UDpipe au format txt - ConLL) (fichier de patrons)
#Exemple pour la rubrique 3242 - culture et la dépendance objet : perl BAO3__extraction_patrons.pl 2020-udpipe-regexp-3242.txt patrons.txt
#-----------------------------------------------------------------------------------------------------------------------------------------------------------

#On récupère tous les patrons syntaxiques contenus dans le fichier patrons.txt et on les place dans une liste
open my $termino, "$ARGV[1]";
@patrons=<$termino>;
close $termino;
#my $suitedepos="VERB DET NOUN";

#ON parcourt le fichier étiqueté UDpipe
open my $entree, "$ARGV[0]";
@pos=();
@token=();
while (my $ligne=<$entree>) {

	next if $ligne=~m/^#|\d+-\d+/ ;
	$ligne=~s/\r?\n//g;
	if ($ligne ne "") {
	my @ligne = split /\t/, $ligne;
	push @pos, $ligne[3];
	push @token, $ligne[1];
	#my $rep=<STDIN>;
	}

	else {
	#print "je traite les listes\n";
	#print "@pos\n";
	#print "@token\n";
	foreach my $suitedepos (@patrons) {
		$long=0;
		$suitedepos=~s/\r?\n//g;
		while ($suitedepos=~/ /g) {$long++}
		$i=0;
		foreach my $element (@pos) {
			$i++;
			if ($suitedepos =~/^$element/) {
			#print "presence de $element, je cherche toute la séquence de $i et ensuite sur $long caractères\n";
			$suite="";		
			for ($j=$i-1;$j<=$long+$i-1;$j++) {$suite=$suite.$pos[$j]." "}
			#print "==>$suite<==\n";
			#print "==>$suitedepos<==\n";
			if ($suite=~/$suitedepos/) {
				
				#print "MATCH de $i à $j\n";
				#print "@token[$i-1..$j-1]\n";
				$extract = join(" ", @token[$i-1..$j-1]);
				$dict{lc($extract)}++;
				print "$extract\n";
					}
				}
			}
		}
	#my $rep=<STDIN>;
	@pos=();
	@token=();
	}
}
