Version HTML du script posCordial.pl

Pour télécharger le script : cliquez ici

#!/usr/bin/perl

<<DOC; 
Axel COURT & Marjorie SEIZOU
AVRIL 2010
 usage : perl posCordial.pl	fichier-taggé-par-Cordial
 
Ce programme permet de générer sans effort la liste complète des patrons précis possibles pour un fichier étiqueté par Cordial,
sur la base des patrons minimaux ADJ NOM, NOM ADJ, NOM PREP NOM

Cordial utilise en effet de nombreuses abréviations, puisque le programme indique le genre, le nombre et d'autres renseignements sur les mots qu'il tagge.

La liste complète des patrons envisageant toutes les possibilités de combinaisons est utile pour lancer les procédures d'extraction via n-grams par exemple, 
où l'utilisation de regex pour envisager la multitude de POS est impossible, puisque chaque patron est stocké comme clé d'une table de hashage
et doit donc être une suite unique.

DOC

#-----------------------------------------------------------
# Test des paramètres
if ($ARGV[0] eq "") {
    print "Usage : perl posCordial.pl	fichier-taggé-par-Cordial \n" ;
    exit(-1);
} 

#----------------------------------------------------------
# Ouverture des fichiers en lecture et écriture
#----------------------------------------------------------
open (FICCORDIAL, $ARGV[0]) or die ("Impossible d'ouvrir le fichier Cordial : $!\n");
open (OUTPOS, ">posC.txt") or die ("Impossible d'ouvrir le fichier de sortie : $!\n");
my %adj;
my %nom;
my %posfinal;

# Parcours du fichier étiqueté, et récupération de toutes les variantes possibles autour de ADJ et NC
while ($ligne = <FICCORDIAL>) {
	if ($ligne =~ /^.+(NC[^\t]+)(\t.)*$/) {
		my $abrv = $1;
		chomp($abrv);
		$nom{$abrv}++;
	}
	elsif ($ligne =~ /^.+(ADJ[^\t]+)(\t.)*$/) {
		my $abrv = $1;
		chomp($abrv);
		$adj{$abrv}++;
	}
}
close(FICCORDIAL);

# Combinaison des POS entre-elles pour former les patrons
my @triadj = sort keys %adj;
my @trinom = sort keys %nom;
my @copienom = @trinom;
while (my $nomcourant = shift(@trinom)) {
	foreach my $adjcourant (@triadj) {
		$posfinal{"$adjcourant $nomcourant"}++;
		$posfinal{"$nomcourant $adjcourant"}++;
	}
	foreach my $nom2 (@copienom) {
		$posfinal{"$nomcourant PREP $nom2"}++;	
	}
}

# Ecriture du fichier pos.txt
while ( ($key, $value) = each(%posfinal) ) {
	print OUTPOS $key;
	print OUTPOS "\n";
}
close(OUTPOS);
exit;