| 12
 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() | 
Partager