05 — Analyseur de texte

Niveau requis : 3 (chaînes, listes, dictionnaires) / Difficulté : 3/5 / Durée estimée : 2–3 h

Objectif

L'utilisateur colle un texte (ou le programme utilise un texte d'exemple intégré), et le programme affiche un rapport : nombre de caractères, de mots, de phrases, longueur moyenne des mots, les 5 mots les plus fréquents et la fréquence de chaque lettre.

--- Rapport ---
Caracteres : 486
Mots : 89
Phrases : 6
Longueur moyenne d'un mot : 4.4
Top 5 des mots : le (7), de (5), python (4), est (3), code (3)

C'est le premier projet où un dictionnaire est la SEULE bonne réponse — tu vas sentir pourquoi cette structure existe.

Notions utilisées

Cahier des charges

Étapes de construction

  1. Crée le fichier avec TEXT et affiche les deux stats triviales : nombre de caractères (len(TEXT)) et nombre de mots (len(TEXT.split())). Lance : tu as déjà un mini-rapport.
  2. Compte les phrases avec TEXT.count(".") + ! + ?. Ajoute au rapport.
  3. Construis la liste des mots nettoyés : lower(), split(), puis strip(".,;:!?\"'()") sur chaque mot. Affiche les 10 premiers pour contrôler visuellement. Ce print de contrôle est temporaire mais OBLIGATOIRE : tu ne construis jamais sur une liste que tu n'as pas vue.
  4. Longueur moyenne : somme des longueurs / nombre de mots, formatée :.1f.
  5. Fréquence des mots : dictionnaire word_counts, rempli avec le motif word_counts[word] = word_counts.get(word, 0) + 1. Affiche le dict brut pour vérifier sur un petit texte de 10 mots dont tu connais la réponse.
  6. Top 5 : trie word_counts.items() par valeur décroissante et prends les 5 premiers. Indice : sorted(word_counts.items(), key=lambda pair: pair[1], reverse=True) — le lambda est expliqué au niveau 4 ; si tu n'es pas à l'aise, une fonction nommée def get_count(pair): return pair[1] fait exactement pareil.
  7. Fréquence des lettres : même motif que les mots, en filtrant avec isalpha(). Affiche trié par ordre alphabétique (sorted(letter_counts.items())). Retire les prints de contrôle, mets en forme le rapport final.

Extensions possibles

  1. Ignorer les « mots vides » (le, la, de, un…) dans le top 5, via une liste STOP_WORDS.
  2. Demander le texte à l'utilisateur avec input() au lieu de la constante (une seule ligne — le multi-ligne au clavier viendra avec les fichiers, niveau 5).
  3. Afficher un histogramme texte des lettres : e : ######### (une multiplication de chaîne par valeur).
  4. Compter les mots UNIQUES et le pourcentage de vocabulaire unique — un set fait ça en une ligne, c'est son métier.

Erreurs fréquentes sur ce projet

Critères de réussite

Commit conseillé

git add projects/mini-projects/05-analyseur-de-texte/
git commit -m "project: add text analyzer"

Puis entrée de journal + git push.