Bonjour,

Je suis en train d'essayer de compléter ce squelette basé sur l'expérience de Shannon :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from math import log
from random import random
 
#==================== 1ère partie ==============
 
def IncFreq(distribution:dict, letter:str):
    """ Incrémente le nombre d'occurrences de *letter* dans
        *distribution*.
        
        `distribution est un dictionnaire où une clé est une lettre
        et la valeur associée le nombre d'occurrences de cette lettre.
    """
    if letter in distribution :
        distribution[letter] += 1
    else:
        distribution[letter] = 1
 
#______________________________________________________________________________
 
def AnalFreq(distribution:dict, text:str):
    """ Ajoute à *distribution* les nombres d'occurrences des lettres 
        de *text*.
    """
    for letter in text:
        distribution[letter] = IncFreq(distribution, letter)
 
#______________________________________________________________________________
 
def string2distribution(text:str) -> dict:
    """ Retourne une nouvelle distribution qui donne les nombres
        d'occurrences des lettres de *text*.
    """
    distribution = dict()
    AnalFreq(distribution, text)
    return distribution
 
#______________________________________________________________________________
 
def TotalFreq(distribution:dict) -> int:
    """ Retourne la somme des nombres d'occurrences de *distribution*.
    """
    return sum(distribution.values())
 
#______________________________________________________________________________
 
def string2information(text:str) -> float:
    """ Retourne un dictionnaire une clé est une lettre et la valeur
        la quantité d'information portée par cette lettre.
    """
    info = dict()
    distribution = string2distribution(text)
    TotalFreq = TotalFreq(dict)
    for letter in distribution :
        info[letter] = log(TotalFreq/distribution[letter], 2)
    return info
 
#______________________________________________________________________________
 
def string2entropy(text:str) -> float:
    """ Retourne l'entropie du jeu de caractères du texte de référence
        *text*.
    """
 
    dist = string2distribution(text)
    entropie = 0
    for letter in dist : 
        entropie -= ((dist(letter)/TotalFreq(dist))*log(dist(letter)/TotalFreq(dist), 2))
    return entropie 
 
 
#================== PROGRAMME PRINCIPAL =============
 
if __name__ == '__main__':
 
 
    file = open('fable1.txt', 'r')
    text = file.read()
J'aimerais savoir si mes premières fonctions sont correctes svp ?

Cordialement.