Solución al Ejercicio: Contar palabras
📋 Copiar código
import re
def contar_palabras(texto):
"""
Cuenta la frecuencia de cada palabra en una cadena de texto.
Args:
texto: La cadena de texto de entrada.
Returns:
Un diccionario donde las claves son las palabras (en minúsculas y sin
puntuación final) y los valores son sus respectivas frecuencias.
"""
palabras = re.findall(r'\b\w+\b', texto.lower())
frecuencia_palabras = {}
for palabra in palabras:
# Eliminar la puntuación al final de la palabra (si la hay)
palabra_limpia = re.sub(r'[.,!?;:"\'()\[\]{}]*$', '', palabra)
frecuencia_palabras[palabra_limpia] = frecuencia_palabras.get(palabra_limpia, 0) + 1
return frecuencia_palabras
# Ejemplos de uso
texto1 = "Este es un texto de ejemplo. Este texto tiene varias palabras."
frecuencias1 = contar_palabras(texto1)
print(f"Frecuencia de palabras en '{texto1}': {frecuencias1}")
texto2 = "La casa azul y la casa roja."
frecuencias2 = contar_palabras(texto2)
print(f"Frecuencia de palabras en '{texto2}': {frecuencias2}")
texto3 = "Palabra palabra, otra palabra!"
frecuencias3 = contar_palabras(texto3)
print(f"Frecuencia de palabras en '{texto3}': {frecuencias3}")
Explicación del Código:
-
Importación del módulo re
:
- Se importa el módulo
re
para
utilizar expresiones regulares, que son útiles para encontrar palabras
en el texto.
-
Definición de la función
contar_palabras(texto)
:
- Se define una función llamada
contar_palabras
que toma una cadena de texto texto
como argumento.
-
Encontrar todas las palabras en el
texto:
palabras = re.findall(r'\b\w+\b',
texto.lower())
:
- Se utiliza
re.findall()
para encontrar todas las coincidencias del patrón de expresión
regular r'\b\w+\b'
en el texto convertido a minúsculas
(texto.lower()
).
\b
: Coincide con un
límite de palabra (la posición entre un carácter de palabra y un
carácter que no lo es).
\w+
: Coincide con uno o
más caracteres de palabra (letras, números y guion bajo).
- Por lo tanto, esta línea extrae todas
las palabras del texto y las almacena en una lista llamada
palabras
, todas en minúsculas.
-
Inicialización del diccionario
frecuencia_palabras
:
- Se crea un diccionario vacío llamado
frecuencia_palabras
para almacenar la frecuencia de cada
palabra encontrada.
-
Conteo de la frecuencia de cada
palabra:
- Se itera a través de cada
palabra
en la lista palabras
obtenida en el paso anterior.
- Para cada
palabra
:
palabra_limpia = re.sub(r'[.,!?;:"\'()\[\]{}]*$',
'', palabra)
: Se utiliza re.sub()
para eliminar
cualquier signo de puntuación que pueda aparecer al final de la
palabra. El patrón r'[.,!?;:"\'()\[\]{}]*$'
coincide
con cero o más ocurrencias de cualquiera de los caracteres de
puntuación listados al final ($
) de la cadena
palabra
.
frecuencia_palabras[palabra_limpia] =
frecuencia_palabras.get(palabra_limpia, 0) + 1
: Se actualiza
la frecuencia de la palabra_limpia
en el diccionario
frecuencia_palabras
. Se utiliza
get(palabra_limpia, 0)
para obtener la frecuencia actual (o 0
si es la primera vez que se encuentra) y se incrementa en 1.
-
Retorno del diccionario de
frecuencias de palabras:
- Finalmente, la función devuelve el
diccionario
frecuencia_palabras
, que contiene cada palabra
única encontrada en el texto (en minúsculas y sin puntuación final) como
clave y su número de ocurrencias como valor.
-
Ejemplos de uso:
- Se proporcionan tres ejemplos de
cadenas de texto para demostrar el funcionamiento de la función.
- Para cada ejemplo, se llama a la
función y se imprime el diccionario resultante que muestra la frecuencia
de cada palabra.