Pular para o conteúdo principal

Capítulo 1: Carregadores de Documentos

Introdução​

Carregadores de documentos são o ponto de entrada de qualquer pipeline de RAG. Eles extraem o conteúdo textual de vários formatos de arquivo e fontes, preparando-o para processamento posterior.

Carregadores de Documentos do LangChain​

O LangChain oferece mais de 100 carregadores de documentos para diferentes fontes:

Carregadores de PDF​

from langchain.document_loaders import (
PyPDFLoader,
PDFPlumberLoader,
PyMuPDFLoader,
UnstructuredPDFLoader
)

# Carregamento básico de PDF
loader = PyPDFLoader("document.pdf")
documents = loader.load()

# Para melhor extração de tabelas
loader = PDFPlumberLoader("document.pdf")
documents = loader.load()

# Para PDFs escaneados (com OCR)
loader = UnstructuredPDFLoader(
"scanned.pdf",
mode="elements",
strategy="ocr_only"
)

Texto e Markdown​

from langchain.document_loaders import (
TextLoader,
UnstructuredMarkdownLoader
)

# Texto simples
loader = TextLoader("readme.txt", encoding="utf-8")
docs = loader.load()

# Markdown com estrutura
loader = UnstructuredMarkdownLoader("docs.md")
docs = loader.load()

Conteúdo Web​

from langchain.document_loaders import (
WebBaseLoader,
UnstructuredURLLoader,
RecursiveUrlLoader
)

# Página única
loader = WebBaseLoader("https://example.com/docs")
docs = loader.load()

# Múltiplas URLs
loader = UnstructuredURLLoader(urls=[
"https://example.com/page1",
"https://example.com/page2"
])

# Rastrear o site inteiro
loader = RecursiveUrlLoader(
url="https://docs.example.com",
max_depth=3
)

Documentos Office​

from langchain.document_loaders import (
Docx2txtLoader,
UnstructuredWordDocumentLoader,
UnstructuredPowerPointLoader,
UnstructuredExcelLoader
)

# Documentos Word
loader = Docx2txtLoader("report.docx")
docs = loader.load()

# PowerPoint
loader = UnstructuredPowerPointLoader("presentation.pptx")
docs = loader.load()

# Excel
loader = UnstructuredExcelLoader("data.xlsx")
docs = loader.load()

Leitores do LlamaIndex​

O LlamaIndex oferece o SimpleDirectoryReader e leitores especializados:

from llama_index import SimpleDirectoryReader
from llama_index.readers import PDFReader, DocxReader

# Carregar diretório inteiro
reader = SimpleDirectoryReader(
input_dir="./documents",
recursive=True,
exclude_hidden=True,
required_exts=[".pdf", ".docx", ".txt"]
)
documents = reader.load_data()

# Leitor específico
pdf_reader = PDFReader()
docs = pdf_reader.load_data(file_path="document.pdf")

Carregadores de Banco de Dados​

from langchain.document_loaders import (
SQLDatabaseLoader,
CSVLoader
)

# De banco de dados SQL
loader = SQLDatabaseLoader(
query="SELECT content, metadata FROM documents",
db=database_connection
)

# De CSV
loader = CSVLoader(
file_path="data.csv",
source_column="source",
csv_args={"delimiter": ","}
)

Estrutura do Documento​

Todos os carregadores retornam objetos Document:

from langchain.schema import Document

# Estrutura do documento
doc = Document(
page_content="The actual text content...",
metadata={
"source": "document.pdf",
"page": 1,
"author": "John Doe",
"created_date": "2024-01-15"
}
)

Boas Práticas​

PráticaDescrição
Tratamento de ErrosSempre capture erros de arquivo não encontrado e de parsing
CodificaçãoEspecifique codificação UTF-8 para arquivos de texto
MetadadosPreserve informações de origem para citações
Carregamento em LoteCarregue múltiplos arquivos de forma eficiente
# Carregamento robusto com tratamento de erros
def load_documents_safely(file_paths):
documents = []
errors = []

for path in file_paths:
try:
loader = get_loader_for_file(path)
docs = loader.load()
documents.extend(docs)
except Exception as e:
errors.append({"file": path, "error": str(e)})

return documents, errors

Resumo​

  • LangChain oferece mais de 100 carregadores para diversos formatos
  • LlamaIndex fornece o SimpleDirectoryReader para carregamento em lote facilitado
  • Sempre preserve metadados para atribuição de origem
  • Trate erros de forma adequada em sistemas de produção

Próximos Passos​

Continue para Capítulo 2: Divisão de Texto para aprender sobre estratégias de chunking.