#!/usr/bin/perl
use utf8;
binmode STDOUT,":utf8";

# Utilisation du programme :
# perl bao3-patron-UD.pl fichier_annoté_udpipe patron
# exemple : perl bao3-patron-UD.pl bao2_UD_pl_3246.udpipe.xml NOUN ADP NOUN

# -------------------------------------------------------------------------------

# RECUPERATION DES ARGUMENTS DONNES AU PROGRAMME
my $fileatraiter = shift @ARGV; # fichier à traiter (bao2_annot_ud_pl.udpipe.xml)
my @PATRON = @ARGV; # patron (NOUN ADP NOUN)

# EXTRACTION DU PATRON
open my $input, "<:encoding(utf-8)", $fileatraiter; # ouverture du fichier à traiter
my @LISTE=<$input>;
close $input;
while (my $ligne=shift @LISTE) { # on vide la liste au fur et à mesure pour que la manipulation d'indices soit plus facile
    my $terme = "";
    # si la ligne contenue dans $ligne correspond au premier élément du patron $PATRON[0]
    if ($ligne =~/<item><a>[^<]+<\/a><a>([^<]+)<\/a><a>[^<]+<\/a><a>$PATRON[0]<\/a>/) {
        $terme=$terme.$1; # récupération du terme correspondant au patron
        my $indice = 1;
        my $longueur = 1;
        # alors il faut que je lise autant de lignes qu'il en reste dans le patron
        while (($LISTE[$indice-1]=~/<item><a>[^<]+?<\/a><a>([^<]+?)<\/a><a>[^<]+?<\/a><a>$PATRON[$indice]<\/a>/) and ($indice <= $#PATRON)) {
			$indice++;
			$terme.=" ".$1; # récupération du terme correspondant au patron
			$longueur++;
		}
        if ($longueur == scalar @PATRON) { # si le terme trouvé est aussi long que le patron
            $dicoPatron{$terme}++; # on l'ajoute dans le dictionnaire
			$nbTerme++;
        }
    }
}

# ECRITURE DANS LE FICHIER OUTPUT
open my $output,">:encoding(UTF-8)","extraction-UD-patron_pl.txt"; # ouverture du fichier output
print $output "PATRON : ";
foreach my $element (@PATRON) {
    print $output "$element " # écriture du patron
}
print $output "\n$nbTerme éléments trouvés\n"; # écriture du nombre de termes trouvés
foreach my $patron (sort {$dicoPatron{$b} <=> $dicoPatron{$a} } keys %dicoPatron) { # comptage de la fréquence de chaque terme
	print $output "$dicoPatron{$patron}\t$patron\n"; # écriture de chaque terme unique et sa fréquence
}
close($output);