【LangChain】—— Document Loaders文档加载器
本文全面解析LangChain文档加载器的类型及使用方法。文档加载是LangChain开发的基础环节,主要分为5大类:本地文件格式(如PDF、Word、Excel)、网页/网络资源、云服务/远程存储、数据库以及特殊类型文件(音频、代码等)。文章提供了详细的实操教程,包括安装核心依赖和具体加载示例,如TXT、PDF、Word和CSV/Excel文件的加载方法,帮助开发者快速掌握不同数据源的文档加载技
LangChain文档加载器全解析:类型汇总+手把手实操教程
在LangChain开发中,文档加载是数据接入的第一步,也是最基础的核心环节——无论你是搭建知识库问答、实现文档总结,还是做文本分析类应用,都需要先通过「文档加载器」将本地文件、网页、数据库等各类数据源,转换成LangChain可识别的标准Document对象(包含page_content内容和metadata元数据)。
之前有很多同学问我,LangChain到底有多少种文档加载器?不同格式的文件该怎么正确加载?今天就结合实操,把LangChain文档加载器的类型、用法一次性讲透,全程附可直接复制运行的代码,新手也能快速上手。
一、LangChain文档加载器分类(按数据源划分)
LangChain的文档加载器全部集成在langchain-community包中(旧版在langchain包内),核心按「数据源类型」可分为5大类,每类对应常用场景和具体加载器,用表格整理更清晰,方便大家按需查找:
| 分类 | 常用加载器 | 适用场景 | 关键备注 |
|---|---|---|---|
| 本地文件格式(最常用) | TextLoader | TXT纯文本文件 | 轻量高效,需指定编码避免中文乱码 |
| PyPDFLoader | PDF文件 | 轻量优先,每页生成1个Document对象 | |
| PDFPlumberLoader | PDF文件(复杂格式) | 可提取表格、精准定位文本,依赖pdfplumber | |
| Docx2txtLoader/DocxLoader | Word(.docx)文档 | 前者简单易用,后者支持提取样式 | |
| CSVLoader | CSV表格文件 | 每行生成1个Document,可自定义分隔符 | |
| ExcelLoader | Excel(.xls/.xlsx)文件 | 依赖pandas、openpyxl,支持多工作表 | |
| UnstructuredFileLoader | 多格式通用(TXT/PDF/DOCX/MD等) | 新手首选,无需区分文件格式,依赖unstructured | |
| 网页/网络资源 | WebBaseLoader | 任意网页内容加载 | 基于BeautifulSoup,可解析网页结构 |
| YoutubeLoader | YouTube视频内容 | 提取字幕或语音转文字,依赖pytube | |
| WikipediaLoader | 维基百科页面内容 | 可按标题、URL加载,支持多语言 | |
| 云服务/远程存储 | S3Loader | AWS S3存储桶文件 | 需配置AWS密钥,支持批量加载 |
| GoogleDriveLoader | 谷歌云盘文件/文件夹 | 需授权,支持文档、表格等多种格式 | |
| NotionLoader | Notion数据库/页面 | 需Notion API密钥,支持批量同步 | |
| 数据库 | SQLDatabaseLoader | 关系型数据库(MySQL/PostgreSQL等) | 执行SQL查询,将结果转为Document |
| MongoDBLoader | MongoDB文档数据库 | 支持按条件查询,批量加载文档 | |
| 特殊类型 | AudioLoader | 音频文件(MP3/WAV等) | 需配合ASR模型(如Whisper)转文字 |
| CodeLoader | 代码文件(Python/Java等) | 支持语法解析,保留代码结构 |
二、实操教程:手把手加载各类文件(LangChain最新版)
核心前提:LangChain最新版(v0.1+)将文档加载器迁移到了langchain-community包中,所以第一步必须安装核心依赖,后续按需安装对应文件格式的依赖即可。
前置准备:安装核心依赖
# 核心包(必装):包含所有文档加载器
pip install langchain langchain-community
# 按需安装文件格式依赖(根据自己要加载的文件选择)
pip install pypdf # PDF加载(PyPDFLoader)
pip install pdfplumber # PDF复杂加载(PDFPlumberLoader)
pip install python-docx # Word文档加载
pip install pandas openpyxl # Excel/CSV加载
pip install unstructured # 通用加载器(UnstructuredFileLoader)
pip install beautifulsoup4 # 网页加载(WebBaseLoader)
pip install pytube # YouTube视频加载
示例1:加载TXT文件(最简单,新手入门)
TXT文件是最基础的格式,加载无需复杂配置,重点注意指定编码(utf-8),避免中文乱码。
from langchain_community.document_loaders import TextLoader
# 1. 初始化加载器:指定文件路径和编码
loader = TextLoader(
file_path="test.txt", # 替换成你的TXT文件路径
encoding="utf-8" # 中文文件必加,避免乱码
)
# 2. 加载文件:返回Document对象列表(TXT只有1个对象)
documents = loader.load()
# 查看加载结果
print("=== TXT加载结果 ===")
print("文本内容(前200字):", documents[0].page_content[:200])
print("元数据(文件信息):", documents[0].metadata) # 包含文件路径、编码等
示例2:加载PDF文件(最常用场景)
推荐使用PyPDFLoader(轻量),如果PDF有表格、复杂排版,改用PDFPlumberLoader。注意:PDF每页会生成1个Document对象,方便后续按页处理。
from langchain_community.document_loaders import PyPDFLoader
# 1. 初始化加载器(替换成你的PDF路径)
loader = PyPDFLoader("test.pdf")
# 2. 加载文件:每页1个Document,返回列表
documents = loader.load()
# 查看结果
print("=== PDF加载结果 ===")
print(f"PDF总页数:{len(documents)}")
print("第1页内容(前300字):", documents[0].page_content[:300])
# 若PDF有表格,改用PDFPlumberLoader
# from langchain_community.document_loaders import PDFPlumberLoader
# loader = PDFPlumberLoader("test.pdf")
# documents = loader.load()
示例3:加载Word(DOCX)文件
两种加载器可选:Docx2txtLoader(简单,无需关注样式)、DocxLoader(复杂,可提取字体、段落样式),新手用前者即可。
from langchain_community.document_loaders import Docx2txtLoader
# 1. 初始化加载器(替换成你的DOCX路径)
loader = Docx2txtLoader("test.docx")
# 2. 加载文件:整个Word文档生成1个Document对象
documents = loader.load()
# 查看结果
print("=== Word加载结果 ===")
print("文档内容(前300字):", documents[0].page_content[:300])
示例4:加载CSV/Excel表格文件
CSV用CSVLoader,Excel用ExcelLoader,两者用法类似,重点可自定义编码、分隔符(CSV)、工作表(Excel)。
# 示例4.1:加载CSV文件
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader(
file_path="test.csv",
encoding="utf-8",
delimiter=",", # 分隔符,默认逗号,Excel导出的CSV可用
csv_args={"quotechar": '"'} # 可选,处理字段包含引号的情况
)
documents = loader.load() # 每行1个Document对象
print("=== CSV加载结果 ===")
print(f"CSV总行数:{len(documents)}")
print("第一行内容:", documents[0].page_content)
# 示例4.2:加载Excel文件
from langchain_community.document_loaders import ExcelLoader
loader = ExcelLoader(
file_path="test.xlsx",
sheet_name="Sheet1" # 指定工作表,默认第一个工作表
)
documents = loader.load() # 每行1个Document对象
print("=== Excel加载结果 ===")
print(f"Excel总行数:{len(documents)}")
print("第一行内容:", documents[0].page_content)
示例5:通用加载器(新手福音,多格式适配)
如果不想区分文件格式,不管是PDF、DOCX还是TXT,直接用UnstructuredFileLoader,一行代码切换文件路径即可,适合多格式混合的场景。
from langchain_community.document_loaders import UnstructuredFileLoader
# 支持PDF/DOCX/TXT/MD等,只需替换文件路径
loader = UnstructuredFileLoader(
file_path="test.pdf", # 换成test.docx、test.txt也能正常加载
encoding="utf-8"
)
documents = loader.load()
print("=== 通用加载器结果 ===")
print("文件内容(前200字):", documents[0].page_content[:200])
补充:加载后的数据处理(必学技巧)
加载后的documents是Document对象列表,若文件过大(如几百页PDF),直接使用会导致后续模型处理超时,建议进行「文档分割」,保持上下文连贯的同时,控制单篇内容长度。
from langchain_text_splitters import CharacterTextSplitter
# 初始化文本分割器
text_splitter = CharacterTextSplitter(
chunk_size=500, # 每个分片500个字符(可调整)
chunk_overlap=50 # 分片间重叠50个字符,保持上下文连贯
)
# 分割加载后的文档
split_docs = text_splitter.split_documents(documents)
print(f"分割前文档数:{len(documents)}")
print(f"分割后文档数:{len(split_docs)}")
print("分割后第一个分片:", split_docs[0].page_content)
三、常见问题&避坑技巧
-
中文乱码:所有加载器都指定encoding=“utf-8”,若仍乱码,尝试encoding=“gbk”(适配Windows系统导出的文件)。
-
PDF加载失败:检查是否安装pypdf依赖,复杂PDF(加密、扫描件)需先解密或OCR识别(LangChain不直接支持OCR,需先借助Tesseract等工具转文字)。
-
依赖冲突:若安装后报错,尝试升级依赖(pip install --upgrade langchain langchain-community),或指定兼容版本。
-
批量加载:若需加载多个同类型文件(如多个PDF),可使用DirectoryLoader(遍历文件夹),无需逐个初始化加载器。
四、总结
LangChain文档加载器的核心优势的是「统一接口+多源适配」——无论数据源是本地文件、网页还是数据库,都能通过相同的load()方法加载,转换成标准Document对象,为后续的文本处理、模型调用提供统一格式。
对于新手来说,优先掌握「本地文件加载」和「通用加载器」,就能覆盖80%的开发场景;后续有网页、数据库等需求,再针对性学习对应加载器即可。
最后提醒:所有代码均基于LangChain最新版(v0.1+),若使用旧版,需调整导入路径(旧版从langchain导入,新版从langchain_community导入),避免报错。
如果大家在实操中遇到具体问题,欢迎在评论区留言,后续会补充更多特殊场景的加载技巧~
更多推荐


所有评论(0)