Parcours
/
Haskell
Haskell
/
Exercices
/
Comptage de mots
Comptage de mots

Comptage de mots

Moyen

Introduction

Tu enseignes l'anglais langue étrangère à des lycéens.

Tu as décidé de baser tout ton programme sur des séries télévisées. Tu dois analyser quels mots sont utilisés et à quelle fréquence ils sont répétés.

Cela te permettra de choisir les séries les plus simples pour commencer et d'augmenter progressivement la difficulté au fil du temps.

Instructions

Ta tâche consiste à compter combien de fois chaque mot apparaît dans les sous-titres d'une pièce de théâtre.

Les sous-titres de ces pièces n'utilisent que des caractères ASCII.

Les personnages s'expriment souvent dans un anglais familier, avec des contractions comme they're ou it's. Même si ces contractions proviennent de deux mots (par exemple we are), la contraction (we're) est considérée comme un seul mot.

Les mots peuvent être séparés par n'importe quelle forme de ponctuation (par exemple « : », « ! » ou « ? ») ou d'espace (par exemple « \t », « \n » ou « »). La seule ponctuation qui ne sépare pas les mots est l'apostrophe dans les contractions.

Les nombres sont considérés comme des mots. Si le sous-titre dit It costs 100 dollars., alors 100 sera un mot à part entière.

Les mots ne sont pas sensibles à la casse. Par exemple, le mot you apparaît trois fois dans la phrase suivante :

You come back, you hear me? DO YOU HEAR ME?

L'ordre des décomptes de mots dans le résultat n'a pas d'importance.

Voici un exemple qui reprend plusieurs des éléments abordés ci-dessus :

  • des mots simples
  • des contractions
  • des nombres
  • des mots insensibles à la casse
  • de la ponctuation (y compris les apostrophes) pour séparer les mots
  • différentes formes d'espace pour séparer les mots

"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.

La correspondance pour ce sous-titre serait :

123: 1
agent: 1
cried: 1
fled: 1
i: 1
password: 2
so: 1
special: 1
that's: 1
the: 2

Astuces

Pour venir à bout de cet exercice, tu dois implémenter la fonction wordCount, qui prend un texte et renvoie le nombre de fois que chaque mot apparaît.

Si c'est la première fois que tu résous cet exercice, il est recommandé de t'en tenir à la signature fournie :

wordCount :: String -> [(String, Int)]

Plus tard, ce serait peut-être une bonne idée de revenir sur ce problème et de jouer avec d'autres types de données et bibliothèques :

  • Text, du paquet text.
  • Map, du paquet containers.
  • MultiSet, du paquet multiset

La suite de tests a été délibérément conçue pour accepter presque n'importe quelle signature de type qui a du sens, alors n'hésite pas à chercher celle qui te paraît la meilleure.


Source

C'est un problème jouet classique, mais on s'en est souvenu en le voyant dans le Go Tour.
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Haskell Exercism

Prêt à commencer Comptage de mots ?

Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.