Enseñas inglés como lengua extranjera a estudiantes de secundaria.
Has decidido basar todo tu plan de estudios en series de televisión. Necesitas analizar qué palabras se usan y con qué frecuencia se repiten.
Esto te permitirá elegir las series más sencillas para empezar y aumentar la dificultad poco a poco a medida que pase el tiempo.
Tu tarea consiste en contar cuántas veces aparece cada palabra en el subtítulo de una serie dramática.
Los subtítulos de estas series dramáticas utilizan únicamente caracteres ASCII.
Los personajes suelen hablar en un inglés coloquial y usan contracciones como they're o it's. Aunque estas contracciones provienen de dos palabras (por ejemplo, we are), la contracción (we're) se considera una sola palabra.
Las palabras pueden separarse por cualquier tipo de puntuación (por ejemplo, «:», «!» o «?») o por espacios en blanco (por ejemplo, «\t», «\n» o « «). La única puntuación que no separa palabras es el apóstrofo de las contracciones.
Los números se consideran palabras. Si el subtítulo dice It costs 100 dollars., 100 será una palabra por sí misma.
Las palabras no distinguen entre mayúsculas y minúsculas. Por ejemplo, la palabra you aparece tres veces en la siguiente frase:
You come back, you hear me? DO YOU HEAR ME?
El orden de los recuentos de palabras en el resultado no importa.
Este ejemplo incluye varios de los elementos que hemos visto antes:
"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.
La correspondencia de este subtítulo sería la siguiente:
123: 1
agent: 1
cried: 1
fled: 1
i: 1
password: 2
so: 1
special: 1
that's: 1
the: 2
Para completar este ejercicio tienes que implementar la función wordCount,
que recibe un texto y devuelve cuántas veces aparece cada palabra.
Si es la primera vez que resuelves este ejercicio, te recomendamos que te ciñas a la firma que se proporciona:
wordCount :: String -> [(String, Int)]
Más adelante puede ser buena idea volver sobre este problema y jugar con otros tipos de datos y bibliotecas:
Text, del paquete text.Map, del paquete containers.MultiSet, del paquete multiset
El conjunto de pruebas se diseñó a propósito para aceptar casi cualquier firma de tipo que tenga sentido, así que te animamos a que encuentres la que creas que es la mejor.
Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.