Si bien la cantidad de loaders que contiene LangChain crece cada vez más, aún hay formatos que no se encuentran soportados (Como los Json Lines o JSONL). A continuación vamos a crear un loader propio que cargue ese tipo específico de datos.
Para leer archivos jsonlines desde Python instalaremos su respectiva librería.
%%capture
!pip install jsonlines
Importaremos la clase Document, la librería jsonlines y tiparemos un poco los datos para tener control y readibilidad del código.
from langchain.schema import Document
import jsonlines
from typing import List
Crearemos una clase nativa que llamada TransformersDocsJSONLLoader, esta contendrá el método init y load. En el constructor pediremos el filename y en el método load cargaremos todos los datos desde disco y los agregaremos a un objeto Document.
Para cada línea del jsonlines obtendremos el contenido desde la keyword text y crearemos metadata para almacenar el título, el dueño y el nombre de los diferentes repos (si existen), finalmente los acoplaremos en un objeto Document para retornar una lista de este objeto.
class TransformersDocsJSONLLoader:
def __init__(self, file_path : str):
self.file_path = file_path
def load(self) -> List[Document]:
with jsonlines.open(self.file_path) as reader:
documents = []
for obj in reader:
page_content = obj.get("text", "")
metadata = {
"title" : obj.get("title", ""),
"repo_owner" : obj.get("repo_owner", ""),
"repo_name" : obj.get("repo_name", "")
}
documents.append(
Document(page_content=page_content, metadata=metadata)
)
return documents