2 usuarios conectados

Expandir abreviaturas. Ejercicio en Python

Comparte esto

 

Escribe una función en Python llamada expandir_abreviaturas que tome una cadena de texto y un diccionario de abreviaturas como entrada. La función debe devolver una nueva cadena donde todas las abreviaturas encontradas en el diccionario han sido reemplazadas por su forma expandida. La búsqueda de abreviaturas debe ser insensible a mayúsculas y minúsculas, pero el reemplazo debe mantener la capitalización de la abreviatura original en la cadena.



Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Expandir abreviaturas

📋 Copiar código


import re

def expandir_abreviaturas_es(texto, abreviaturas):
    """
    Expande abreviaturas en español, manteniendo la capitalización y puntuación.
    """
    def expandir_palabra(palabra):
        # Separa la palabra de signos de puntuación (al final, como ".", ",", etc.)
        match = re.match(r"(\W*)(\w[\w\.]*)(\W*)", palabra)
        if not match:
            return palabra  # Si no coincide el patrón, devolver la palabra tal cual

        prefijo, palabra_central, sufijo = match.groups()
        palabra_base = palabra_central.rstrip(".").lower()  # Quitar punto final para buscar en el diccionario

        if palabra_base in abreviaturas:
            expansion = abreviaturas[palabra_base]
            # Mantener capitalización
            if palabra_central.isupper():
                expansion = expansion.upper()
            elif palabra_central.istitle():
                expansion = expansion.capitalize()
            elif palabra_central.islower():
                expansion = expansion.lower()
            # En otros casos (como mezcla rara), se deja como está la expansión
            return f"{prefijo}{expansion}{sufijo}"
        else:
            return palabra

    palabras = texto.split()
    resultado = [expandir_palabra(palabra) for palabra in palabras]
    return " ".join(resultado)


# Ejemplos de uso en español
abreviaturas_es = {"etc": "etcétera", "ud": "usted", "dra": "doctora", "pág": "página"}
texto_es1 = "Por favor, revise la PÁG. 5, Ud. verá los detalles, etc."
print(f"'{texto_es1}' expandido: '{expandir_abreviaturas_es(texto_es1, abreviaturas_es)}'")

texto_es2 = "La Dra. López es muy amable."
print(f"'{texto_es2}' expandido: '{expandir_abreviaturas_es(texto_es2, abreviaturas_es)}'")

texto_es3 = "Necesitamos más información, ETC."
print(f"'{texto_es3}' expandido: '{expandir_abreviaturas_es(texto_es3, abreviaturas_es)}'")

texto_es4 = "Sin abreviaturas conocidas aquí."
print(f"'{texto_es4}' expandido: '{expandir_abreviaturas_es(texto_es4, abreviaturas_es)}'")

abreviaturas_es2 = {"sr": "señor"}
texto_es5 = "El Sr. Pérez llegó."
print(f"'{texto_es5}' expandido: '{expandir_abreviaturas_es(texto_es5, abreviaturas_es2)}'")

abreviaturas_es3 = {"a.m.": "ante meridiem", "p.m.": "post meridiem"}
texto_es6 = "La cita es a las 9:00 a.m."
print(f"'{texto_es6}' expandido: '{expandir_abreviaturas_es(texto_es6, abreviaturas_es3)}'")

texto_es7 = "Llegaremos a las 2:30 P.M."
print(f"'{texto_es7}' expandido: '{expandir_abreviaturas_es(texto_es7, abreviaturas_es3)}'")

texto_es8 = "El Ud. es amable."
print(f"'{texto_es8}' expandido: '{expandir_abreviaturas_es(texto_es8, abreviaturas_es)}'")

texto_es9 = "la DRA. hablaba."
print(f"'{texto_es9}' expandido: '{expandir_abreviaturas_es(texto_es9, abreviaturas_es)}'")


 

Explicación del Código:

  • Importa el módulo re: Esto permite el uso de expresiones regulares para un manejo más flexible de las palabras.

  • Función expandir_abreviatura(palabra):

  • Función expandir_abreviaturas_es(texto, abreviaturas):

  • 📋 Copiar código