Version HTML du script comparaison.pl

Pour télécharger le script : cliquez ici

#!/usr/bin/perl

<<DOC; 
Axel COURT & Marjorie SEIZOU
AVRIL 2010
 usage : perl perl comparaison.pl extractionTreeTagger extractionCordial
 
Veiller à bien spécifier le fichier TreeTagger d'abord, et le fichier Cordial ensuite

DOC

# Test des paramètres
if ($#ARGV != 1) {
    print "Syntaxe : perl comparaison.pl extractionTreeTagger extractionCordial\n" ;
    exit(-1);
}

#--------------------------------------------
# Ouverture des fichiers en lecture
#--------------------------------------------
open (FICTREETAG, "<:encoding(iso-8859-1)", $ARGV[0]) or die ("Impossible d'ouvrir le fichier TreeTagger : $!\n");
open (FICCORDIAL, "<:encoding(iso-8859-1)", $ARGV[1]) or die ("Impossible d'ouvrir le fichier Cordial : $!\n");

open(OUT, ">:encoding(utf8)", "etiquetage_correct.txt") or die ("Impossible d'ouvrir le fichier de sortie : $!\n");
my $dumpgeneral = "";

&comparetreetaggercordial;

print OUT $dumpgeneral;
close(OUT);
exit;

# ------------------------
# Procédures
# ------------------------
sub comparetreetaggercordial {

	my %contenutreetagger;
	my %contenucordial;
	my @fichiertreetag = ();
	my @fichiercordial = ();
	my %segmentscommuns;
	my $patroncourant = "";
	
	while ($ligne = <FICTREETAG>) {
		# Lecture du fichier dans un tableau
		if ($ligne !~ /^\s*$/) {
			chomp($ligne);
			push(@fichiertreetag, $ligne);
		}
	}
	while ($ligne = <FICCORDIAL>) {
		# Lecture du fichier dans un tableau
		if ($ligne !~ /^\s*$/) {
			chomp($ligne);
			push(@fichiercordial, $ligne);
		}
	}
	close(FICTREETAG);
	close(FICCORDIAL);
		
	my $ligne = shift(@fichiertreetag);
	my $i = 0;
	my $j = $#fichiertreetag;
	while ($i <= $j) {
		# On initialise des listes de hash pour chaque patron dans le fichier TreeTagger si on tombe sur des "-----" indiquant une entête de patrons
		if ($ligne =~ /^-+$/) {
			$ligne = shift(@fichiertreetag);
			$patroncourant = $ligne;
			$patroncourant =~ s/PRP:det/PRP/g;
			if (not exists($contenutreetagger{$patroncourant})) {
				$contenutreetagger{$patroncourant} = ();
			}
			$ligne = shift(@fichiertreetag);
			$ligne = shift(@fichiertreetag);
			$i = $i+3;
		}
		# Sinon, c'est qu'on a des résultats d'extraction -> on garnit le tableau de hash correspondant avec
		else {
			push(@{$contenutreetagger{$patroncourant}},$ligne);
			$ligne = shift(@fichiertreetag);
			$i++;
		}
	}
		
	my $ligne = shift(@fichiercordial);
	my $i = 0;
	my $j = $#fichiercordial;
	my $patroncourant = "";
	while ($i <= $j) {
		# On initialise des listes de hash pour chaque patron dans le fichier Cordial si on tombe sur des "-----" indiquant une entête de patrons
		if ($ligne =~ /^-+$/) {
			$ligne = shift(@fichiercordial);
			$patroncourant = $ligne;
			&formatecordial($patroncourant);
			if (not exists($contenucordial{$patroncourant})) {
				$contenucordial{$patroncourant} = ();
			}
			$ligne = shift(@fichiercordial);
			$ligne = shift(@fichiercordial);
			$i = $i+3;
		}
		# Sinon, c'est qu'on a des résultats d'extraction -> on garnit le tableau de hash correspondant avec
		else {
			push(@{$contenucordial{$patroncourant}},$ligne);
			$ligne = shift(@fichiercordial);
			$i++;
		}
	}
	
	while ( ($key, $value) = each(%contenutreetagger) ) {
		my $dump = "";
		my @tabtemptree = @$value;
		my %tabtree  = map { $_, 1 } @tabtemptree;
		my @tabtempcord = @{$contenucordial{$key}};
		my %tabcord  = map { $_, 1 } @tabtempcord;
		while ( ($cle, $valeur) = each(%tabtree) ) {
			if (exists $tabcord{$cle}) {
				$segmentscommuns{$cle}++;
				delete($tabtree{$cle});
				delete($tabcord{$cle});
			}
		}
		$dump .= "---------------------------------------------------------------------------------------------------------\n";
		$dump .= "Patron étudié : $key\n";
		$dumpgeneral .= $dump."---------------------------------------------------------------------------------------------------------\n";
		$dump .= "##############################\nSegments communs\n##############################\n";
		while ( ($cle, $valeur) = each(%segmentscommuns) ) {
			$dump .= "$cle\n";
			$dumpgeneral .= "$cle\n";
			delete $segmentscommuns{$cle};
		}
		$dump .= "\n\n\n";
		$dump .= "##############################\nTreeTagger\n##############################\n";
		while ( ($cle, $valeur) = each(%tabtree) ) {
			$dump .= "$cle\n";
			delete $tabtree{$cle};
		}
		$dump .= "\n\n\n";
		$dump .= "##############################\nCordial\n##############################\n";
		while ( ($cle, $valeur) = each(%tabcord) ) {
			$dump .= "$cle\n";
			delete $tabcord{$cle};
		}
	$dumpgeneral .= "\n\n\n";
	$key =~ s/ /_/g;
	open (SORTIE, ">:encoding(iso-8859-1)", "comparaison_$key.txt") or die ("Impossible de créer le fichier de sortie : $!\n");
	print SORTIE $dump;
	close(SORTIE);
	}
	
}

sub formatecordial {
	
	$_[0] =~ s/NC\w+/NOM/g;
	$_[0] =~ s/ADJ\w+/ADJ/g;
	$_[0] =~ s/PREP/PRP/g;
	return $_[0];
		
}