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.
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}
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
)