1 usuario conectado

Expandir contracciones en inglés. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada expandir_contracciones_ingles que tome una cadena de texto en inglés como entrada y devuelva una nueva cadena con las contracciones comunes expandidas.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  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:

  1. import re:

    • Importa el módulo re para trabajar con expresiones regulares.
  2. def expandir_contracciones_ingles(texto)::

    • Define una función llamada expandir_contracciones_ingles que toma una cadena de texto (texto) como entrada.
  3. contracciones = { ... }:

    • Crea un diccionario contracciones donde las claves son las contracciones comunes (como expresiones regulares) y los valores son sus formas expandidas.
  4. texto_expandido = texto:

    • Inicializa texto_expandido con el texto original.
  5. for contraccion, expansion in contracciones.items()::

    • Itera a través de cada par contracción-expansión en el diccionario.
  6. 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.
  7. 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.
  8. 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).