Écrire une fonction qui, à partir d’un texte pouvant contenir de la ponctuation, des retours à la ligne et différents types de séparateurs, retourne un tableau contenant les 3 mots les plus fréquents, triés par ordre décroissant de fréquence.
Le résultat doit contenir les mots en minuscules.
🔗 Kata Codewars - Most frequently used words in a text
• • •
Un mot est défini comme :
-
une suite de lettres de
AàZ -
pouvant contenir un ou plusieurs apostrophes ASCII
' -
les apostrophes peuvent apparaître :
- au début
- au milieu
- à la fin
Exemples de mots valides :
'abcabc'ab'c
Tous les autres caractères ne font pas partie d’un mot et doivent être traités comme des séparateurs :
#\/.,:;- etc.
Le traitement doit aussi respecter les contraintes suivantes :
-
la recherche est insensible à la casse
-
les mots retournés doivent être normalisés en minuscules
-
en cas d’égalité de fréquence, l’ordre peut être arbitraire
-
si le texte contient moins de 3 mots distincts :
- retourner les 2 premiers
- ou le 1er
- ou un tableau vide s’il n’y a aucun mot
• • •
La fonction doit :
1. extraire les mots valides du texte
2. compter leurs occurrences
3. retourner les 3 mots les plus fréquents
L’enjeu principal du kata est de bien gérer :
- le parsing du texte
- les apostrophes
- la normalisation en minuscules
- le comptage efficace
- la sélection du top 3
• • •
Texte :
In a village of La Mancha, the name of which I have no desire to call to
mind, there lived not long since one of those gentlemen that keep a lance
in the lance-rack, an old buckler, a lean hack, and a greyhound for
coursing. An olla of rather more beef than mutton, a salad on most
nights, scraps on Saturdays, lentils on Fridays, and a pigeon or so extra
on Sundays, made away with three-quarters of his income.
Résultat :
["a", "of", "on"]
Texte :
e e e e DDD ddd DdD: ddd ddd aa aA Aa, bb cc cC e e e
Résultat :
["e", "ddd", "aa"]
Texte :
//wont won't won't
Résultat :
["won't", "wont"]
• • •
Ce kata demande de bien distinguer :
- les vrais mots
- les séquences composées uniquement d’apostrophes, qui ne doivent pas être considérées comme des mots valides
- les caractères spéciaux qui servent de délimiteurs
Il faut également veiller à produire une solution robuste sur :
- des textes longs
- des entrées multi-lignes
- des occurrences mélangées en majuscules/minuscules
• • •
Quelques pistes d’optimisation intéressantes :
- éviter de créer un tableau intermédiaire aussi volumineux que le texte d’entrée
- éviter de trier l’ensemble complet des mots uniques alors qu’on ne cherche que le top 3
Ces optimisations ne sont pas obligatoires pour réussir le kata, mais elles constituent une excellente pratique algorithmique.
• • •
Les tests unitaires associés sont disponibles dans le projet :
Les tests couvrent généralement :
- les cas nominaux
- les variations de casse
- les textes avec ponctuation
- les apostrophes dans les mots
- les entrées vides ou sans mot valide
- les cas où moins de 3 mots distincts existent
• • •
- Strings
- Filtering
- Algorithms
- Regular Expressions
• • •
La fonction doit analyser un texte libre pour :
- identifier correctement les mots valides
- compter leurs occurrences sans tenir compte de la casse
- retourner les 3 mots les plus fréquents
- fournir un résultat en minuscules
C’est un kata très formateur pour travailler :
- la manipulation de chaînes
- le filtrage lexical
- les expressions régulières
- les structures de comptage
- l’optimisation algorithmique