#MODE D'EMPLOI : perl bao3-extract-patron.pl fichier-ud.xml nom_relation > nom_fichier_sortie.txt #!/usr/bin/perl use strict; use utf8; binmode STDOUT, ':utf8'; # L'encodage pour la sortie my $file="$ARGV[0]"; # Assignement des ARVG Pour les fichiers my $relation="$ARGV[1]"; my %dicoRelation=(); # Dictionnaire pour GOUV et DEP $/="

"; # Desactiver la saut a la ligne open my $input ,"<:encoding(utf8)",$file; # Ouverture et lire le corpus etiqueté while (my $phrase=<$input>) { # Pour toutes les phrases d'input my @LIGNES=split(/\n/,$phrase); # Séparer les phrases par saut lignes # Initialisation d'indice i qui va incrémenter à chaque tour de boucle for (my $i=0;$i<=$#LIGNES;$i++) { if ($LIGNES[$i]=~/([^<]+)<\/a>([^<]+)<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>([^<]+)<\/a>[^<]*$relation[^<]*<\/a>[^<]+<\/a>[^<]+<\/a><\/item>/i) { # chercher des relations my $posDep=$1; # $posDep va avoir l'indece dans la phrase my $posGouv=$3; # $posGouv stock la position de GOUV dans la phrase. my $formeDep=$2; # $formeDep stock la forme de DEP if ($posDep > $posGouv) { # Verificaton si le GOUV est avant ou après for (my $k=0;$k<$i;$k++) { # Initialisation d'indice k if ($LIGNES[$k]=~/$posGouv<\/a>([^<]+)<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a><\/item>/) { # Stock la position de GOUV my $formeGouv=$1; # Stocker la forme du gouverneur dans $formeGouv. $dicoRelation{"$formeGouv $formeDep"}++; # Stocker dans la dictionnaire } } } else { # Sinon, le GOUV se trouve après le dépendant. for (my $k=$i+1;$k<=$#LIGNES;$k++) { if ($LIGNES[$k]=~/$posGouv<\/a>([^<]+)<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a>[^<]+<\/a><\/item>/) { my $formeGouv=$1; $dicoRelation{"$formeGouv $formeDep"}++; } } } } } } close ($input); # Fermeture d'entrée. foreach my $relation (sort {$dicoRelation{$b}<=>$dicoRelation{$a}} (keys %dicoRelation)) { # Imprimer la liste des Gouv etDep et leur fréquence. print "$relation\t$dicoRelation{$relation}\n"; }