Solución al Ejercicio: Encontrar palabra más frecuente
📋 Copiar código
import re
from collections import Counter
def encontrar_palabra_mas_frecuente(texto):
"""
Encuentra la palabra más frecuente en una cadena de texto.
Args:
texto: La cadena de texto de entrada.
Returns:
La palabra que aparece con mayor frecuencia en el texto (en minúsculas
y sin puntuación final).
"""
palabras = re.findall(r'\b\w+\b', texto.lower())
palabras_limpias = [re.sub(r'[.,!?;:"\'()\[\]{}]*$', '', palabra) for palabra in palabras]
contador_palabras = Counter(palabras_limpias)
if contador_palabras:
return contador_palabras.most_common(1)[0][0]
else:
return None
# Ejemplos de uso
texto1 = "Este es un texto de ejemplo. Este texto tiene varias palabras. Ejemplo texto."
palabra_frecuente1 = encontrar_palabra_mas_frecuente(texto1)
print(f"La palabra más frecuente en '{texto1}' es: '{palabra_frecuente1}'")
texto2 = "La casa azul y la casa roja."
palabra_frecuente2 = encontrar_palabra_mas_frecuente(texto2)
print(f"La palabra más frecuente en '{texto2}' es: '{palabra_frecuente2}'")
texto3 = "Palabra palabra, otra palabra!"
palabra_frecuente3 = encontrar_palabra_mas_frecuente(texto3)
print(f"La palabra más frecuente en '{texto3}' es: '{palabra_frecuente3}'")
texto4 = ""
palabra_frecuente4 = encontrar_palabra_mas_frecuente(texto4)
print(f"La palabra más frecuente en '{texto4}' es: '{palabra_frecuente4}'")
Explicación del Código:
-
Importación de módulos:
import re
: Importa el
módulo de expresiones regulares para encontrar palabras en el texto.
from collections import Counter
:
Importa la clase Counter
del módulo collections
,
que es especialmente útil para contar la frecuencia de elementos en una
lista.
-
Definición de la función
encontrar_palabra_mas_frecuente(texto)
:
- Se define una función llamada
encontrar_palabra_mas_frecuente
que toma una cadena de texto
texto
como argumento.
-
Extracción y limpieza de palabras:
palabras = re.findall(r'\b\w+\b',
texto.lower())
: Se encuentran todas las palabras en el texto
(convertido a minúsculas) utilizando una expresión regular que busca
secuencias de caracteres alfanuméricos delimitadas por límites de
palabra.
palabras_limpias = [re.sub(r'[.,!?;:"\'()\[\]{}]*$',
'', palabra) for palabra in palabras]
: Se crea una nueva lista
llamada palabras_limpias
iterando sobre la lista
palabras
. Para cada palabra, se elimina cualquier signo de
puntuación que aparezca al final de la palabra utilizando re.sub()
.
-
Conteo de la frecuencia de las
palabras:
contador_palabras =
Counter(palabras_limpias)
: Se crea un objeto Counter
a partir de la lista palabras_limpias
. Counter
automáticamente cuenta la frecuencia de cada elemento único en la lista
y lo almacena en un diccionario.
-
Obtención de la palabra más
frecuente:
if contador_palabras:
: Se
verifica si el contador_palabras
no está vacío (es decir,
si el texto contenía al menos una palabra).
return
contador_palabras.most_common(1)[0][0]
:
contador_palabras.most_common(1)
devuelve una lista con los n
elementos más comunes y
sus conteos, en este caso, solo el elemento más común (una lista de
un solo tuple). El tuple contiene la palabra y su frecuencia.
[0]
accede al primer (y
único) tuple en la lista.
[0]
accede al primer
elemento del tuple, que es la palabra más frecuente.
else: return None
: Si el
texto estaba vacío y contador_palabras
está vacío, la
función devuelve None
.
-
Ejemplos de uso:
- Se proporcionan varios ejemplos de
cadenas de texto para probar la función, incluyendo casos con
repeticiones y puntuación.
- Para cada ejemplo, se llama a la
función y se imprime la palabra más frecuente encontrada. Se incluye un
caso con una cadena vacía para mostrar el manejo de esa situación.