当前位置: 首页 > news >正文

LangChain组件 Document loaders文档加载器

LangChain组件 Document loaders文档加载器

文档加载器提供了一套标准接口,用于将不同来源(如csv、PDF或Json等)的数据读取为LangChain的文档格式。

这确保了无论数据来源如何,都能对其进行一致性处理

文档加载器(内置或自行实现)需实现BaseLoader接口

Class Document

Document是LangChain内文档的统一载体,所有文档加载器最终返回此类的实例。

一个基础的Document类实例,基于如下代码创建:

from langchain_core.documents import Documentdocument = Document(page_content="Hello World!",metadata={"source": "example.txt"}
)

可以看到,Document类其核心记录了:

  • page_content:文档内容
  • metadata:文档元数据(字典)

不同的文档加载器可能定义了不同的参数,但是其都实现了统一的接口(方法)。

  • load():一次性加载全部文档
  • lazy_load():延迟流式传出文档,对大型数据集很有用,避免内存溢出

LangChain内置了许多文档加载器,详情参见官方文档

下面简单介绍几个常用的文档加载器:

  • CSVLoader
  • JSONLoader
  • PDFLoader

CSVLoader

一个简单的CSVLoader的使用示例如下

from langchain_community.document_loaders.csv_loader import CSVLoaderloader = CSVLoader(file_path="data/sample.csv", encoding="utf-8")# 一次性加载全部文档
documents = loader.load()# 对于大数据集,分段返回文档
for document in loader.lazy_load():print(document)

自定义CSV文件的解析和加载

from langchain_community.document_loaders.csv_loader import CSVLoader# 自定义加载
loader = CSVLoader(file_path="data/sample.csv",csv_args={"delimiter": ",",  # 指定分隔符"quotechar": '"',  # 指定字符串的引用包裹# 字段列表 (无表头使用,有表头勿用会读取首行数据)"fieldnames": ["id", "name", "age"],},encoding="utf-8"
)data = loader.load()
print("*"*20)
print(data)

JSONLoader

JsonLoader用于将Json数据加载为Document类型对象

使用JsonLoader需要额外安装:pip install jq

jq是一个跨平台的json解析工具,LangChain底层对Json的解析就是基于jq工具实现的。

将Json数据的信息抽取出来,封装为Document对象,抽取的时候依赖jq_schema语法

jq_schema语法:

  • .表示整个Json对象(根)
  • []表示数组
  • .name表示抽取对应的属性
  • .[].表示抽取对应的列表内部内容
  • .[].name表示抽取列表所有内部对象的name属性
from langchain_community.document_loaders.json_loader import JSONLoader# 自定义加载
loader = JSONLoader(file_path="data/sample.json",   # 文件路径jq_schema=".",                   # jq_schema语法text_content=False,               # 抽取的是否是字符串,默认Truejson_lines=True                  # 是否是JsonLines格式,默认False
)

jq_schema字段为"."时,表示抽取的为整个json对象,在Python中为字典,所以text_content要改为False因为抽取的不是字符串

如果jq_schema字段为".name"时,对应属性名字为字符串,则相应的text_content要改为True

对于JsonLine格式 非标准的Json,而是多个json同级排列 每一行代表一个独立的Json

{"name":  "周杰轮", "age": 11, "gender": "男"}
{"name":  "李华", "age": 12, "gender": "男"}
{"name":  "李芳", "age": 12, "gender": "女"}

调用示例:

from langchain_community.document_loaders.json_loader import JSONLoader# 抽取整个Json文件内容
loader = JSONLoader(file_path="data/sample.json",   # 文件路径jq_schema=".",                   # jq_schema语法text_content=False
)data = loader.load()
print(data)
print("="*30)# 抽取某个字段的内容
loader = JSONLoader(file_path="data/sample.json",   # 文件路径jq_schema=".name",                   # jq_schema语法
)
data = loader.load()
print(data)
print("="*30)# 抽取列表内字段内容
loader = JSONLoader(file_path="data/sample_list.json",   # 文件路径jq_schema=".[].name",                   # jq_schema语法
)
data = loader.load()
print(data)
print("="*30)# 抽取列表内 内容对象
loader = JSONLoader(file_path="data/sample_list.json",   # 文件路径jq_schema=".[]",                   # jq_schema语法text_content=False
)
data = loader.load()
print(data)
print("="*30)# 抽取JsonLine格式 文件内容
loader = JSONLoader(file_path="data/sample_line.json",   # 文件路径jq_schema=".",                   # jq_schema语法text_content=False,json_lines=True  # 每一行都是一个独立的JSON对象
)
data = loader.load()
print(data)
print("="*30)

PyPDFLoader

LangChain内支持许多的PDF加载器,我们选择其中的PyPDFLoader使用

PyPDFLoader加载器,依赖PyPDF库,所以需要安装pip install pypdf

PyPDFLoader使用还是比较简单,如下代码即可快速加载PDF中的文字内容

from langchain_community.document_loaders import PyPDFLoaderloader = PyPDFLoader(file_path="./data/test.pdf", # 文件路径必填mode="page",                 # 读取模式 默认page(按页划分不同的Document对象)或single(将整个PDF作为一个Document对象)password=None,               # PDF文件密码 可选
)

调用示例:

from langchain_community.document_loaders import PyPDFLoaderloader = PyPDFLoader(file_path="./data/test.pdf", # 文件路径必填mode="page"
)i = 0
for doc in loader.lazy_load():i += 1print(f"第{i}页内容:", "=" * 20)print(doc.page_content)

基本加载器 TextLoader 与 文档分割器

除了前面介绍的Loader以外,还有一个基本的加载器:TextLoader
作用:读取文本文件(如.txt),将全部内容放入一个Document对象中

from langchain_community.document_loaders import TextLoaderloader = TextLoader(file_path="./data/test.txt",encoding="utf-8"
)docs = loader.load()
print(docs)
print(len(docs))

文档分割器

RecursiveCharacterTextSplitter,递归字符文本分割器,主要用于按自然段落分割大文档。

是LangChain官方推荐的默认字符分割器

它在保持上下文完整性和控制片段大小之间实现良好平衡

  • 基于文本的自然段落分割大文档为小文档
  • 可以指定小文档的最大字符数、重叠字符数
  • 可以手动指定段落划分的依据(符号)以及字符数量统计函数
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
loader = TextLoader(file_path="./data/test.txt",encoding="utf-8"
)docs = loader.load()
print(docs)
print(len(docs))splitter = RecursiveCharacterTextSplitter(chunk_size=200,         # 分段的最大字符数chunk_overlap=20,       # 分段之间允许重叠的字符数# 文本分段依据separators=["\n\n", "\n", "。", "!", "?", "!", "?", ",", ",", " ", ""],# 字符统计依据(函数)length_function=len
)split_docs = splitter.split_documents(docs)
print(len(split_docs))
for doc in split_docs:print(doc)
http://www.jsqmd.com/news/443722/

相关文章:

  • 2026年 冷却塔厂家推荐排行榜:工业/开式/钢制/封闭/密闭/蒸发式,高效散热与节能降耗的工业心脏之选 - 品牌企业推荐师(官方)
  • python 将当前目录下的Pdf 每30页切分
  • 最新盒马鲜生卡使用秘籍:回收常见问题解答 - 团团收购物卡回收
  • 微算法科技(NASDAQ: MLGO)探索量子机器学习算法在预测模型中的应用,利用量子核方法提升复杂模式识别能力
  • 华为OD机考双机位C卷终极指南:2025最新题库、算法分类与高效备考策略
  • 终于定下了worthinton液氮罐/气相液氮罐/航空液氮罐,聊聊我为什么选这家供应商 - 品牌推荐大师1
  • 钟表维修保养:基于行业数据的实证指南
  • 2026 技术实务:深度拆解 ChatGPT Plus 订阅风控与支付链路优化策略
  • 网站数据库密码错误,导致无法访问网站怎么办?
  • 在安卓手机上使用WSToolbox部署Kodbox不显示验证码的一个解决办法
  • 2026年 数字化手术室系统厂家推荐榜:智能高清智慧医院手术室解决方案,专业实力与创新技术深度解析 - 品牌企业推荐师(官方)
  • 山海鲸教育版来了~助力数字化教育全面升级
  • 前端硬核指南:如何让AI“打字机”效果在浏览器里丝滑跑起来?
  • 2026联合省选游记
  • 资本出海必看!持牌机构笛杨咨询全解BVI离岸架构搭建流程 - 博客万
  • 分析2026年天津口碑好的乳胶气球制造商哪家好 - 工业设备
  • 百联OK卡网上回收如何选平台,新手避坑指南 - 淘淘收小程序
  • 分析2026年都燕果律师服务性价比,擅长案件及选择哪家好 - 工业品网
  • 帝国cms不小心把后台登录超时时间改为0,进不了后台,怎么办?EmpireCMS
  • js逆向hook
  • 京东 E 卡闲置不用?超全回收攻略,安全省心不踩坑 - 可可收
  • 沃尔玛卡密怎么回收,不可不看的几种方式 - 淘淘收小程序
  • 2026年上海信誉好的纠纷律师团队排名,口碑不错的纠纷律师推荐 - 工业品牌热点
  • Typecho分类/标签计数不准怎么办
  • 企业微信功能详细介绍2026最新版AI办公与内外协同一体化完整指南 - 品牌2026
  • 2026年焊锡机厂家推荐排行榜:在线式焊锡机、波峰焊加锡设备、AOI/CCD视觉焊锡机、全自动焊线/组装焊接机,高精度智能焊接解决方案精选 - 品牌企业推荐师(官方)
  • 2026年高品质婚庆气球厂家口碑排名,全国范围内好用品牌汇总 - 工业设备
  • 克苏鲁游戏PCGAME-The.Dark.Rites.of.Arkham-TENOKE 分享
  • 聊聊2026年婚姻有实力律师,成都靠谱婚姻律师事务所排名 - 工业品网
  • 贵州米粉非物质文化遗产品牌哪家好,山沟沟里的粉值得推荐吗 - mypinpai