Solución al Ejercicio: Expandir contracciones en inglés
📋 Copiar código
import re
def expandir_contracciones_ingles(texto):
"""
Expande las contracciones comunes en inglés en una cadena de texto.
Args:
texto: La cadena de texto en inglés de entrada.
Returns:
La cadena de texto con las contracciones expandidas.
"""
contracciones = {
r"won't": "will not",
r"can't": "cannot",
r"n't": " not",
r"'re": " are",
r"'s": " is",
r"'d": " would",
r"'ll": " will",
r"'t": " not",
r"'ve": " have",
r"'m": " am"
}
texto_expandido = texto
for contraccion, expansion in contracciones.items():
patron = re.compile(r"(?i)\b" + contraccion + r"\b")
texto_expandido = re.sub(patron, expansion, texto_expandido)
return texto_expandido
# Ejemplos de uso
texto1 = "I won't do it. It's not fair."
resultado1 = expandir_contracciones_ingles(texto1)
print(f"'{texto1}' expandido: '{resultado1}'")
texto2 = "They're going. He's here."
resultado2 = expandir_contracciones_ingles(texto2)
print(f"'{texto2}' expandido: '{resultado2}'")
texto3 = "I'd like to go. We'll see."
resultado3 = expandir_contracciones_ingles(texto3)
print(f"'{texto3}' expandido: '{resultado3}'")
texto4 = "You haven't seen it. I'm tired."
resultado4 = expandir_contracciones_ingles(texto4)
print(f"'{texto4}' expandido: '{resultado4}'")
texto5 = "Let's go!" # 's aquí es posesivo, no contracción de 'is'
resultado5 = expandir_contracciones_ingles(texto5)
print(f"'{texto5}' expandido: '{resultado5}'")
texto6 = ""
resultado6 = expandir_contracciones_ingles(texto6)
print(f"'' expandido: '{resultado6}'")
Explicación del Código:
-
import re
:
- Importa el módulo
re
para
trabajar con expresiones regulares.
-
def
expandir_contracciones_ingles(texto):
:
- Define una función llamada
expandir_contracciones_ingles
que toma una cadena de texto (texto
)
como entrada.
-
contracciones = { ... }
:
- Crea un diccionario
contracciones
donde las claves son las contracciones comunes (como expresiones
regulares) y los valores son sus formas expandidas.
-
texto_expandido = texto
:
- Inicializa
texto_expandido
con el texto original.
-
for contraccion, expansion in
contracciones.items():
:
- Itera a través de cada par
contracción-expansión en el diccionario.
-
patron = re.compile(r"(?i)\b" +
contraccion + r"\b")
:
- Crea un patrón de búsqueda de expresión
regular para la contracción actual:
(?i)
: Ignora la
capitalización.
\b
: Asegura que la
contracción coincida como una palabra completa.
contraccion
: La
contracción a buscar (ya formateada como una expresión regular en
las claves del diccionario).
\b
: Otro límite de
palabra.
-
texto_expandido = re.sub(patron,
expansion, texto_expandido)
:
- Reemplaza todas las ocurrencias de la
contracción (ignorando la capitalización y como palabra completa) con su
forma expandida en
texto_expandido
.
-
return texto_expandido
:
- Devuelve la cadena con las contracciones
expandidas.
Ejemplos de Uso:
Los ejemplos muestran cómo la función expande
varias contracciones comunes en inglés. Ten en cuenta que la clave 's'
se expande a " is", lo que podría no ser siempre correcto (por ejemplo, en
posesivos como "John's"). Para una expansión más precisa, se necesitaría una
lógica más compleja basada en el contexto.
Para adaptar esto al español, necesitarías
crear un diccionario similar con las contracciones comunes en español (como
"pa'" por "para", aunque estas son menos formales y menos comunes en el texto
escrito formal).