Las cadenas fundacionales están compuestas por varias cadenas, donde cada eslabón será una cadena en sí misma. Crearemos una serie de cadenas que procesarán el texto de una manera específica para obtener una respuesta precisa.

A continuación crearemos una cadena secuencial que contendrá 2 cadenas fundacionales: La primera será una cadena transform, que transformará y limpiará el input, y la segunda será una cadena que contenga un modelo de lenguaje que pueda responder a esta data limpia.

Creando una función cleaner

Crearemos una función cleaner que luego integraremos a una cadena. Esta función limpiará el texto de entrada de emojis, símbolos y links. Recibirá como input un diccionario que contendrá en la keyword “text” el texto a limpiar y mediante regex sustituiremos todas las coincidencias por espacios vacíos. Finalmente retornaremos un nuevo diccionario con la keyword “clean text” y el texto limpio.

import re

def clean_text(entry):
  text = entry["text"]

  emoji_pattern = re.compile(
      "["
      "\\U0001F600-\\U0001F64F" #emotes
      "\\U0001F300-\\U0001F5FF" #symbols and pictograms
      "\\U0001F680-\\U0001F6FF" #transport and map symbols
      "\\U0001F1E0-\\U0001F1FF" #flags (on iOS)
      "\\U00002702-\\U000027B0"
      "\\U000024C2-\\U0001F251"
      "]+", flags=re.UNICODE
  )
  text = emoji_pattern.sub(r'', text)
  
  url_pattern = re.compile(r'https?://\\S+|www\\.\\S+') #urls
  text = url_pattern.sub(r'', text)

  return {"clean_text" : text}

Integrando la función a una cadena transform

Podemos integrar esta función como una cadena añadiéndola mediante una cadena de transformación, para esto importaremos la clase desde langchain→chains.

from langchain.chains import TransformChain

Crearemos una cadena transform especificando qué variables recibirá la función y qué retornará, con esto estará lista para la integración.

cleaning_chain = TransformChain(
    input_variables=["text"],
    output_variables=["clean_text"],
    transform=clean_text
)