Aller au contenu

Leçon 9

Python, fréquence des lettres d'un texte

Vidéo 9 : Python, fréquence des lettres d'un texte · 3 min 43 s · sous-titres en français

Le cours écrit

9.1 Une fréquence est une probabilité

On tire au hasard une lettre dans un texte, avec équiprobabilité. La probabilité d'obtenir la lettre « e » est alors la fréquence de « e » dans le texte : c'est le lien entre proportion et probabilité de la leçon 3. Le texte est une population, et chaque lettre en est un individu.

9.2 Compter une lettre

On écrit le texte en minuscules, sans accents, sans ponctuation. On parcourt ses caractères, comme une liste.

def nb_occurrences(lettre, texte):
    n = 0
    for c in texte:
        if c == lettre:
            n = n + 1
    return n

9.3 La liste des fréquences

On construit la liste des effectifs des 2626 lettres, en compréhension, puis on divise par le nombre total de lettres. Les espaces ne sont pas comptés.

alphabet = "abcdefghijklmnopqrstuvwxyz"

def frequences(texte):
    effectifs = [nb_occurrences(lettre, texte) for lettre in alphabet]
    total = sum(effectifs)
    return [n / total for n in effectifs]

9.4 En français, en anglais

Voici deux textes de même sens, écrits pour ce cours.

texte_fr = ("le hasard ne suit aucune regle pour une seule partie "
            "mais il devient previsible quand on repete une experience "
            "un tres grand nombre de fois les savants ont longtemps etudie "
            "les jeux de cartes et de des avant de comprendre que les memes "
            "calculs servent aussi pour les assurances la meteo et la medecine "
            "aujourd hui on mesure le risque avec des nombres simples "
            "une moyenne et un ecart type et chacun peut decider "
            "en connaissance de cause")

texte_en = ("chance follows no rule for a single game "
            "but it becomes predictable when we repeat an experiment "
            "a very large number of times scholars studied card games "
            "and dice for a long time before they understood that the same "
            "calculations also serve for insurance weather and medicine "
            "today we measure risk with simple numbers "
            "a mean and a standard deviation and everyone can decide "
            "with full knowledge of the facts")

Exemple 40. Le texte français compte 358358 lettres, le texte anglais 336336. La lettre « e » arrive en tête dans les deux langues : 20,7 %20{,}7\,\% en français et 15,2 %15{,}2\,\% en anglais, en arrondissant à un dixième. La lettre « u » est bien plus fréquente en français (7,3 %7{,}3\,\% contre 3,0 %3{,}0\,\%), la lettre « h » en anglais (3,0 %3{,}0\,\% contre 0,8 %0{,}8\,\%), et le « w », à 2,4 %2{,}4\,\% en anglais, n'apparaît pas une seule fois dans le texte français.

Un texte aussi court ne donne que des tendances : sur des textes longs, les fréquences varient moins d'un texte à l'autre. Chaque langue a ainsi sa signature, que les codes secrets par décalage de lettres ne cachent pas.

9.5 La proportion de voyelles est une espérance

On tire une lettre au hasard, et on pose Z=1Z = 1 si c'est une voyelle, et Z=0Z = 0 sinon, en comptant le « y » parmi les voyelles. Comme à l'exemple 33, l'espérance de ZZ est la probabilité d'obtenir une voyelle : c'est la proportion de voyelles du texte. On réutilise la fonction de la leçon 8, les valeurs étant 00 ou 11 et les probabilités étant les fréquences.

valeurs = [1 if lettre in "aeiouy" else 0 for lettre in alphabet]
print(esperance(valeurs, frequences(texte_fr)))

Exemple 41. On obtient environ 0,440{,}44 en français et 0,410{,}41 en anglais.

Lire le cours complet du chapitre

Exercices 17 et 18

  • Exercice 17 : un mot, à la main
  • Exercice 18 : un message codé

Exercices du chapitre (PDF, 165 Ko)

Corrigés

Cherche d'abord les exercices sur ta feuille, puis compare avec le corrigé détaillé.

Corrigés du chapitre (PDF, 149 Ko)

Tu es hors connexion. Les chapitres téléchargés restent disponibles dans Hors connexion.