1 usuario conectado

Analizar frecuencia de letras. Ejercicio en Python

Comparte esto

 

Escribe una función en Python llamada analizar_frecuencia_letras que tome una cadena de texto en español como entrada y devuelva un diccionario donde las claves son las letras del alfabeto español (en minúsculas, incluyendo la 'ñ') y los valores son sus frecuencias relativas en el texto (un número entre 0 y 1).


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Analizar frecuencia de letras

📋 Copiar código


import re
from collections import Counter

def analizar_frecuencia_letras(texto):
  """
  Analiza la frecuencia relativa de las letras del alfabeto español
  en una cadena de texto.

  Args:
    texto: La cadena de texto en español a analizar.

  Returns:
    Un diccionario con la frecuencia relativa de cada letra.
  """
  texto_limpio = re.sub(r'[^a-záéíóúüñ]', '', texto.lower())
  total_letras = len(texto_limpio)
  if total_letras == 0:
    return {}

  frecuencia = Counter(texto_limpio)
  frecuencia_relativa = {letra: count / total_letras for letra, count in frecuencia.items()}

  alfabeto_es = "abcdefghijklmnñopqrstuvwxyz"
  for letra in alfabeto_es:
    if letra not in frecuencia_relativa:
      frecuencia_relativa[letra] = 0

  return dict(sorted(frecuencia_relativa.items()))

# Ejemplos de uso
texto1 = "Hola mundo"
frecuencia1 = analizar_frecuencia_letras(texto1)
print(f"Frecuencia de letras en '{texto1}': {frecuencia1}")

texto2 = "El veloz murciélago hindú comía feliz cardillo y kiwi."
frecuencia2 = analizar_frecuencia_letras(texto2)
print(f"Frecuencia de letras en '{texto2}': {frecuencia2}")

texto3 = "A a B b C c"
frecuencia3 = analizar_frecuencia_letras(texto3)
print(f"Frecuencia de letras en '{texto3}': {frecuencia3}")

texto4 = "Texto sin letras."
frecuencia4 = analizar_frecuencia_letras(texto4)
print(f"Frecuencia de letras en '{texto4}': {frecuencia4}")

texto5 = ""
frecuencia5 = analizar_frecuencia_letras(texto5)
print(f"Frecuencia de letras en '': {frecuencia5}")

texto6 = "Ñoño come ñoquis."
frecuencia6 = analizar_frecuencia_letras(texto6)
print(f"Frecuencia de letras en '{texto6}': {frecuencia6}")

 

Explicación del Código:

  1. Importa los módulos re y Counter:

    • re: Se utiliza para limpiar el texto de caracteres no alfabéticos.
    • Counter: De la biblioteca collections, es útil para contar la frecuencia de los elementos.
  2. Función analizar_frecuencia_letras(texto):

    • texto_limpio = re.sub(r'[^a-záéíóúüñ]', '', texto.lower()): Limpia el texto, eliminando cualquier carácter que no sea una letra del alfabeto español (incluyendo acentos y la 'ñ'), y convierte todo a minúsculas.
    • total_letras = len(texto_limpio): Obtiene el número total de letras en el texto limpio.
    • if total_letras == 0:: Si no hay letras, devuelve un diccionario vacío.
    • frecuencia = Counter(texto_limpio): Cuenta la frecuencia de cada letra en el texto limpio.
    • frecuencia_relativa = {letra: count / total_letras for letra, count in frecuencia.items()}: Calcula la frecuencia relativa de cada letra dividiendo su conteo por el número total de letras.
    • alfabeto_es = "abcdefghijklmnñopqrstuvwxyz": Define el alfabeto español completo.
    • Itera a través de cada letra del alfabeto español y se asegura de que esté presente en el diccionario de frecuencia_relativa (con una frecuencia de 0 si no aparece en el texto).
    • return dict(sorted(frecuencia_relativa.items())): Devuelve el diccionario de frecuencias relativas, ordenado alfabéticamente por letra.

Ejemplos de Uso:

Los ejemplos muestran cómo la función analiza la frecuencia de las letras en diferentes textos en español. El diccionario resultante muestra la proporción de cada letra en el texto.