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.