3 usuarios conectados

Contar palabras. Ejercicio en Python

Comparte esto

 

Escribe una función en Python llamada contar_palabras que tome una cadena de texto como entrada y devuelva un diccionario donde las claves son las palabras encontradas en el texto (ignorando la capitalización y la puntuación al final de las palabras) y los valores son el número de veces que aparece cada palabra.



Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  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:

  1. 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.
  2. 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.
  3. 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.
  4. Inicialización del diccionario frecuencia_palabras:

    • Se crea un diccionario vacío llamado frecuencia_palabras para almacenar la frecuencia de cada palabra encontrada.
  5. 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.
  6. 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.
  7. 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.