2 usuarios conectados

Normalizar texto. Ejercicio en Python

Comparte esto

 

Escribe una función en Python llamada normalizar_texto_es que tome una cadena de texto en español como entrada y devuelva una nueva cadena con todos los caracteres en minúsculas y sin acentos.



Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Normalizar texto

📋 Copiar código

def normalizar_texto_es(texto):
    texto = texto.lower()
    acentos = {
        'á': 'a', 'é': 'e', 'í': 'i',
        'ó': 'o', 'ú': 'u', 'ü': 'u',
        'ñ': 'n',
        'Á': 'a', 'É': 'e', 'Í': 'i',
        'Ó': 'o', 'Ú': 'u', 'Ü': 'u',
        'Ñ': 'n'
    }
    return ''.join(acentos.get(c, c) for c in texto)


# Pruebas
textos = [
    "Hola, ¿Cómo Estás?",
    "Mañana Iré Al Centro.",
    "ÁÉÍÓÚÜÑáéíóúüñ",
    "Texto sin acentos.",
    "",
    "Palabra con diéresis: pingüino"
]

for texto in textos:
    print(f"'{texto}' -> '{normalizar_texto_es(texto)}'")



Explicación del Código:

  1. Importa el módulo unicodedata: Este módulo proporciona acceso a la base de datos de caracteres Unicode.

  2. Función normalizar_texto_es(texto):

    • texto = texto.lower(): Convierte toda la cadena de texto a minúsculas.
    • texto_sin_acentos = ''.join((c for c in unicodedata.normalize('NFD', texto) if unicodedata.category(c) != 'Mn')): Realiza la eliminación de acentos:
      • unicodedata.normalize('NFD', texto): Aplica la normalización Unicode NFD (Normalization Form Decomposition). Esto descompone los caracteres acentuados en su carácter base y un carácter de "marca" que representa el acento. Por ejemplo, 'á' se convierte en 'a' seguido de una marca de acento.
      • (c for c in ... if unicodedata.category(c) != 'Mn'): Itera a través de los caracteres resultantes de la descomposición y filtra aquellos cuya categoría Unicode (unicodedata.category(c)) no sea 'Mn' (Mark, Nonspacing). Las marcas de acento tienen esta categoría, por lo que se eliminan.
      • ''.join(...): Une los caracteres filtrados para formar la cadena sin acentos.
    • Devuelve la cadena normalizada.

Ejemplos de Uso:

Los ejemplos muestran cómo la función convierte diferentes cadenas de texto en español a minúsculas y elimina los acentos, incluyendo vocales acentuadas, la letra 'ñ' y la diéresis en la 'ü'.

Este tipo de normalización es muy útil para realizar búsquedas o comparaciones de texto donde no quieres que las variaciones de acentos o mayúsculas/minúsculas afecten los resultados.