Escribe un código en Python que tome una frase y
devuelva un diccionario con el recuento de cada letra que aparece en la frase
(ignorando espacios y signos de puntuación, y considerando mayúsculas y
minúsculas como la misma letra).
Solución al Ejercicio: Convertir letras acentuadas a no acentuadas
📋 Copiar código
import unicodedata
def eliminar_acentos(frase):
"""
Toma una frase en español y devuelve la misma frase con las vocales acentuadas
reemplazadas por sus equivalentes sin acento.
Args:
frase: La frase en español (cadena de texto).
Returns:
Una nueva cadena de texto con las vocales sin acento.
"""
texto_sin_acentos = ''.join(c for c in unicodedata.normalize('NFD', frase)
if unicodedata.category(c) != 'Mn')
return texto_sin_acentos
# Ejemplo de uso
frase_con_acentos = "Ésta es una frase con acentos en español: áéíóú."
frase_sin_acentos = eliminar_acentos(frase_con_acentos)
print(f"Frase original: {frase_con_acentos}")
print(f"Frase sin acentos: {frase_sin_acentos}")
otra_frase_con_acentos = "La niña comió melón rápidamente."
otra_frase_sin_acentos = eliminar_acentos(otra_frase_con_acentos)
print(f"\nFrase original: {otra_frase_con_acentos}")
print(f"Frase sin acentos: {otra_frase_sin_acentos}")
Explicación del Código:
import unicodedata
:
- Importa el módulo
unicodedata
,
que proporciona acceso a la base de datos de caracteres Unicode. Se utiliza
para normalizar la cadena y separar los caracteres base de sus signos
diacríticos (como los acentos).
def eliminar_acentos(frase):
:
- Define una función llamada
eliminar_acentos
que toma una frase (frase
) como
argumento.
"""Docstring..."""
:
- La cadena de documentación explica la
función, sus argumentos y lo que devuelve.
texto_sin_acentos = ''.join(c for
c in unicodedata.normalize('NFD', frase) if unicodedata.category(c) != 'Mn')
:
- Esta línea utiliza una comprensión
de generador dentro de la función
join()
para
construir la nueva cadena sin acentos.
unicodedata.normalize('NFD', frase)
:
Normaliza la cadena frase
a su forma descompuesta
(Normalization Form Decomposition). Esto significa que los caracteres con
acentos se separan en el carácter base y el carácter del acento. Por
ejemplo, 'á' se convierte en 'a' seguido de un carácter que representa el
acento agudo.
c for c in ...
: Itera sobre
cada carácter c
en la cadena normalizada.
if unicodedata.category(c) != 'Mn'
:
Esta es la condición clave. unicodedata.category(c)
devuelve la
categoría Unicode del carácter. 'Mn' significa "Mark, non-spacing", que es
la categoría a la que pertenecen la mayoría de los signos diacríticos como
los acentos. Por lo tanto, esta condición filtra todos los caracteres que NO
son signos diacríticos.
''.join(...)
: Une todos los
caracteres que pasaron el filtro en una nueva cadena vacía, creando así la
cadena sin acentos.
return texto_sin_acentos
:
- La función devuelve la nueva cadena de texto
texto_sin_acentos
donde las vocales acentuadas han sido
reemplazadas por sus equivalentes sin acento.
Ejemplo de uso:
- Se definen dos frases de ejemplo en
español, una con acentos en todas las vocales y otra con acentos en palabras
comunes.
- Se llama a la función
eliminar_acentos
con cada frase y el resultado (la frase sin acentos) se imprime.