Working through this module?0 of 17 done
Module 14 · Page 15 of 20 · 9 sections

Document Loaders and Text Splitters

How documents are loaded into a standard format and split into chunks, the popular loaders and splitters, two worked examples and the splitter parameters.

14.1

What are Document Loaders?

  • Document Loaders help load data from different sources into a standard format (Document objects).
  • They support file types like PDF, TXT, DOCX, CSV, HTML, JSON, web pages, databases, etc.
  • Each loaded document contains page_content (text) and metadata (source, page number, etc.).
  • Loaders make it easy to integrate your private data with LLM applications.
14.2

What are Text Splitters?

  • Text Splitters divide large documents into smaller chunks.
  • LLMs have token limits, so splitting helps process large documents efficiently.
  • Different splitters are available based on the use case (character, token, semantic, recursive).
  • Proper chunking improves retrieval accuracy and reduces irrelevant context.
  • You can also set chunk size, overlap and custom splitting rules.
14.3

Document Loading and Splitting Flow

Data SourcesPDF, TXT / DOCX, web, databases
Document LoaderLoad into LangChain
Document Objectspage_content + metadata
Text SplitterSplit into chunks
Document ChunksChunk 1 ... Chunk N
14.4

Popular Document Loaders in LangChain

LoaderSupported SourceUse Case
PyPDFLoaderPDF filesLoad PDF documents
TextLoaderText files (.txt)Simple text documents
Docx2txtLoaderWord documents (.docx)Load Word files
CSVLoaderCSV filesStructured data from CSV
WebBaseLoaderWeb pages (URLs)Load data from websites
DirectoryLoaderMultiple files in a folderBatch load documents
JSONLoaderJSON filesLoad structured JSON data
UnstructuredLoaderVarious formats (PDF, HTML, etc.)Advanced loader using unstructured
14.5

Popular Text Splitters in LangChain

SplitterDescriptionUse Case
CharacterTextSplitterSplit by character countSimple and fast
RecursiveCharacterTextSplitterSplit recursively by characters, sentences and other separatorsMost commonly used
TokenTextSplitterSplit by tokens (e.g., using tiktoken)When you want token-based chunks
SentenceTransformersTokenTextSplitterSplit using sentence transformersSemantic chunking
MarkdownHeaderTextSplitterSplit based on markdown headersDocuments with headers (e.g., docs)
SemanticChunkerSplit using semantic similarityBetter context preservation
14.6

Example 1: Load PDF and Split Using RecursiveCharacterTextSplitter

python
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 1. Load PDF document
loader = PyPDFLoader("data/company_policy.pdf")
docs = loader.load()
print(f"Total pages: {len(docs)}")

# 2. Split documents into chunks
splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    separators=["\n\n", "\n", " ", ""]
)
splits = splitter.split_documents(docs)
print(f"Total chunks: {len(splits)}")

# 3. Check a chunk
print(docs[0].page_content[:200])
print(splits[0].page_content)
print(splits[0].metadata)
14.7

Example 2: Load Web Pages and Split

python
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import CharacterTextSplitter

# 1. Load web pages
loader = WebBaseLoader(["https://example.com/docs"])
docs = loader.load()
print(f"Loaded {len(docs)} documents")

# 2. Split into chunks
splitter = CharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
splits = splitter.split_documents(docs)
print(f"Total chunks: {len(splits)}")

# 3. View chunk
print(splits[0].page_content)
print(splits[0].metadata)
14.8

Useful Parameters for Text Splitters

ParameterDescriptionExample
chunk_sizeSize of each chunk (in characters/tokens)1000
chunk_overlapOverlap between chunks200
separatorsList of separators to split text["\n\n", "\n", ""]
length_functionFunction to calculate length (len or tiktoken)len
keep_separatorKeep the separator in the chunkTrue / False
14.9

Key Takeaways

  • Document loaders help load data from multiple sources.
  • Text splitters divide large documents into smaller chunks.
  • Use the right loader based on your data source.
  • RecursiveCharacterTextSplitter is the most commonly used.
  • Proper chunk size and overlap improve retrieval accuracy.
  • Split documents before creating embeddings.
  • Support for PDF, Word, web, CSV, JSON and more.
  • Essential for building RAG applications and knowledge systems.