#!/usr/bin/perl
use utf8;
binmode STDOUT,":utf8";

# Utilisation du programme :
# perl bao3-patron-TT.pl fichier_annoté_treetagger patron
# exemple : perl bao3-patron-TT.pl bao2_TT_pl_3246.xml NOM PRP NOM

# -------------------------------------------------------------------------------

# RECUPERATION DES ARGUMENTS DONNES AU PROGRAMME
my $fileatraiter = shift @ARGV; # fichier à traiter (bao2_annot_tt_pl.xml)
my @PATRON = @ARGV; # patron (NOM PRP NOM)

# EXTRACTION DU PATRON
open my $input, "<:encoding(utf-8)", $fileatraiter; # ouverture du fichier à traiter
my @LISTE=<$input>; # liste contenant les lignes du fichier
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 =~/<element><data type="type">$PATRON[0](:[^<]+?)?<\/data><data type="lemma">[^<]+?<\/data><data type="string">([^<]+?)<\/data><\/element>/) {
        $terme=$terme.$2; # 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]=~/<element><data type="type">$PATRON[$indice](:[^<]+?)?<\/data><data type="lemma">[^<]+?<\/data><data type="string">([^<]+?)<\/data><\/element>/) and ($indice <= $#PATRON)) {
			$indice++;
			$terme.=" ".$2; # 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-TT-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);