next up previous contents
Next: 4.2 Clés symétriques et Up: 4.1 Entropie Previous: 4.1.2 Entropie d'un langage   Contents


4.1.3 Exemple d'implémentation

Voici un programme, toujours en langage Perl, qui calcule l'entropie d'un texte selon les $ n$-grammes.

#!/usr/bin/perl

use strict;

use Text::SimpleUnaccent;

my $grammes = shift || 1;

my $texte;

while (<>) {

    $texte .= $_;

}

$texte = lc $texte;

$texte = unac($texte);

$texte = s/[a-z]//g;

my $longueur = length $texte;

my %distribution;

while ( my $bloc = substr $texte, 0, $grammes, '' ) {

    $distribution{$bloc}++;

}

%distribution = map { $_ => $distribution{$_} / $longueur } keys %distribution;

my $entropie;

foreach my $probabilite ( values %distribution ) {

    $entropie += $probabilite * log($probabilite) / log(2);

}

$entropie = -$entropie;

print "$entropie\n";

Lorsqu'on lui donne Macbeth de Shakespeare6 comme texte entrant tout en variant le nombre de $ n$-grammes, on obtient les valeurs suivantes:

$ ./entropie 1 macbeth.txt

4.18700377086697

$ ./entropie 2 macbeth.txt

4.39839251524075

$ ./entropie 3 macbeth.txt

4.11370535234626

$ ./entropie 4 macbeth.txt

3.63444192931764

$ ./entropie 5 macbeth.txt

3.10990398744538

$ ./entropie 6 macbeth.txt

2.65927779317573

$ ./entropie 100 macbeth.txt

0.163045868722049

$ ./entropie 1000 macbeth.txt

0.0164467190118132

On peut remarquer que l'entropie tend à diminuer lorsque $ n$ augmente. L'approximation donnée à la section 4.1.2 s'approche de la réalité avec des grandes valeurs de $ n$. Par exemple, on voit que l'entropie selon les 1000-grammes est environ 10 fois plus petite que celle selon les 100-grammes, bien que celles selon les digrammes n'est pas deux fois plus petite que celle selon les monogrammes. La fluctuation de ce dernier cas est expliquée par la particularité qu'a l'anglais d'être fréquenciellement inégal selon les monogrammes, et d'être distribué plus également selon les digrammes.


next up previous contents
Next: 4.2 Clés symétriques et Up: 4.1 Entropie Previous: 4.1.2 Entropie d'un langage   Contents
Simon Perreault 2002-06-02