Document loaders (文档加载器)¶
简介¶
文档加载器提供了一套标准接口,用于将不同来源(如 CSV、PDF 或 JSON等)的数据读取为 LangChain 的文档格式。这确保了无论数据来源如何,都能对其进行一致性处理。
文档加载器(内置或自行实现)需实现BaseLoader接口。
Class Document,是LangChain内文档的统一载体,所有文档加载器最终返回此类的实例。 一个基础的Document类实例,基于如下代码创建:
from langchain_core.documents import Document
document = Document(
page_content="Hello, world!", metadata={"source": "https://example.com"}
)
* page_content:文档内容
* metadata:文档元数据(字典)
不同的文档加载器可能定义了不同的参数,但是其都实现了统一的接口(方法): * load():一次性加载全部文档 * lazy_load():延迟流式传输文档,对大型数据集很有用,避免内存溢出。
from langchain_community.document_loaders.csv_loader import CSVLoader
loader = CSVLoader(
... # 初始化参数
)
# 一次性加载全部文档
documents = loader.load()
# 对于大数据集,分段返回文档
for document in loader.lazy_load():
print(document)
CSVLoader¶
from langchain_community.document_loaders.csv_loader
import CSVLoader
loader = CSVLoader(
file_path="./xxx.csv",
encoding="utf-8" # 指定编码避免报错
csv_args={
“delimiter”: ",", # 指定分隔符
“quotechar”: '"' # 指定字符串的引号包裹,引号中内容不分隔
# 字段列表(无表头使用,有表头勿用,会读取首行做为数据)
"fieldnames": ["name", "age", "gender"],
},
)
data = loader.load()
print(data)
JSONLoader¶
JSONLoader用于将JSON数据加载为Document类型对象。
使用JSONLoader需要额外安装: pip install jq
jq是一个跨平台的json解析工具,LangChain底层对JSON的解析就是基于jq工具实现的。
将JSON数据的信息抽取出来,封装为Document对象,抽取的时候依赖jq_schema语法。

实例:
如下是一个典型的JsonLines文件(每一行都是JSON的文件)
{"name": "周杰轮", "age": 11, "gender": "男"},
{"name": "蔡依临", "age": 12, "gender": "女"},
{"name": "王力鸿", "age": 11, "gender": "男"}
from langchain_community.document_loaders import JSONLoader
loader = JSONLoader(
file_path="xxx.json", # 文件路径
jq_schema=".", # jq schema语法
text_content=False, # 抽取的是否是字符串,默认True
json_lines=True, # 是否是JsonLines文件(每一行都是JSON的文件)
)
document = loader.load()
print(document)
PyPDFLoader¶
LangChain内支持许多PDF的加载器,我们选择其中的PyPDFLoader使用。
PyPDFLoader加载器,依赖PyPDF库,所以,需要安装它:
pip install pypdf
PyPDFLoader使用还是比较简单的,如下代码即可快速加载PDF中的文字内容了:
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
file_path="", # 文件路径必填
mode='page', # 读取模式,可选page(按页面划分不同Document)和single(单个Document)
password='password', # 文件密码,如果pdf加密了
)
TextLoader¶
除了前文学习的三个Loader以外,还有一个基本的加载器:TextLoader
作用:读取文本文件(如.txt),将全部内容放入一个Document对象中。
from langchain_community.document_loaders import TextLoader
loader = TextLoader(
"xxx.txt",
encoding="utf-8",
)
docs = loader.load()
print(docs)
print(len(docs)) # 结果为1
如果文档很大,加载到一个Document对象中是否不太合适,这时候就需要文本分割器。
RecursiveCharacterTextSplitter¶
RecursiveCharacterTextSplitter,递归字符文本分割器,主要用于按自然段落分割大文档。
是LangChain官方推荐的默认字符分割器。
它在保持上下文完整性和控制片段大小之间实现了良好平衡,开箱即用效果佳。
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
loader = TextLoader(
"../P3_LangChainRAG开发/data/Python基础语法.txt",
encoding="utf-8",
)
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 分段的最大字符数
chunk_overlap=50, # 分段之间允许重叠的字符数
# 文本分段依据
separators=["\n\n", "\n", "。", "!", "?", ".", "!", "?", " ", ""],
# 字符统计依据(函数)
length_function=len,
)
split_docs = splitter.split_documents(docs)
RecursiveCharacterTextSplitter递归字符文本分割器,是LangChain官方推荐的默认分割器。 * 基于文本的自然段落分割大文档为小文档 * 可以指定小文档的最大字符数、重叠字符数 * 可以手动指定段落划分的依据(符号)以及字符数量统计函数