Voici un programme, toujours en langage Perl, qui calcule l'entropie d'un texte selon les -grammes.
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";
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