langchain中csvloader,jsonloader,textloader,pyPDFloader的区别
·
| 特性 | CSVLoader | JSONLoader | TextLoader | PyPDFLoader |
|---|---|---|---|---|
| 核心定位 | 加载CSV表格文件,默认每行数据生成一个独立的Document | 加载JSON文件,通过 jq_schema 灵活提取特定字段的内容 |
加载.txt、.md等纯文本文件,将整个文件作为一个Document |
加载PDF文件,默认按页拆分,每页生成一个Document |
| 输出结构 | 每行一个Document:page_content: "列名1: 值1\n列名2: 值2..."metadata: {'source': '...', 'row': 行号} |
根据schema提取,page_content: 指定字段内容metadata: {'source': '...'} |
整个文件一个Document:page_content: 全文内容metadata: {'source': '...'} |
每页一个Document:page_content: 页面文本metadata: {'source': '...', 'page': 页码} |
| 关键参数 | csv_args: delimiter(分隔符)、quotechar(引号)、fieldnames(自定义列名) |
jq_schema: 必填,指定JSON路径content_key: 指定哪个字段作为page_content |
encoding: 指定编码(如'utf-8'),处理中文文件时必须设置 |
mode: "page"(默认,按页)或"single"(合并)extract_images: 设为True可提取图片文字(需OCR库) |
| 依赖库 | Python内置csv模块,无需额外安装 |
jq,需运行 pip install jq |
无依赖 | pypdf,需运行 pip install pypdf |
| 主要用途 | 处理结构化数据,如Excel导出的表格,适合RAG中构建结构化知识库 | 处理API返回数据或嵌套JSON配置,适合需要精确提取特定字段内容的场景 | 处理项目README、代码文件或任何无格式文本,最简单直接的文本加载方式 | 处理学术论文、合同、报告等多页文档,适合需要保留页码信息的场景 |
1. CSVLoader – 处理表格文件
用途:读取 CSV 文件,默认将每一行数据转换为一个独立的 Document。
关键参数:csv_args 字典,里面可以设置 delimiter(分隔符)、quotechar(引号)、fieldnames(自定义列名)等。
依赖:Python 内置 csv,无需额外安装。
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader(
file_path="./data/students.csv", # CSV 文件路径
csv_args={
"delimiter": ",", # 列分隔符(英文逗号)
"quotechar": '"', # 字段引号字符
"fieldnames": ["姓名", "年龄", "性别", "爱好"] # 可选:自定义列名
},
encoding="utf-8", # 中文必须指定编码
)
docs = loader.load() # 加载所有文档
for doc in docs:
print(doc.page_content) # 每行内容:列名:值\n...
print(doc.metadata) # {'source': '...', 'row': 行号}
2. JSONLoader – 解析结构化 JSON
用途:从 JSON 文件中按 jq_schema 提取内容,通常每个匹配项生成一个 Document。
关键参数:jq_schema(必填,指定 JSON 路径),content_key(可选,指定哪个字段作为 page_content)。
依赖:需要安装 jq 库:
pip install jq
。
from langchain_community.document_loaders import JSONLoader
# 假设 data.json 内容如下:
# {
# "students": [
# {"name": "王梓涵", "age": 25, "hobby": "吃饭,rap"},
# {"name": "刘若曦", "age": 22, "hobby": "睡觉,rap"}
# ]
# }
loader = JSONLoader(
file_path="./data/data.json",
jq_schema=".students[]", # 提取 students 数组中的每个元素
content_key="name", # 将 name 字段作为 page_content(可选)
text_content=False # 设为 True 则整个对象转为字符串
)
docs = loader.load()
for doc in docs:
print(doc.page_content) # 如果是 content_key,则输出对应字段的值
print(doc.metadata) # 元数据默认包含 source 和 seq_num
3. TextLoader – 加载纯文本文件
用途:读取 .txt、.md 等文本文件,将整个文件内容作为一个 Document。
关键参数:encoding(编码,中文文件必须设为 utf-8)。
依赖:无。
from langchain_community.document_loaders import TextLoader
loader = TextLoader(
file_path="./data/readme.txt",
encoding="utf-8" # 防止乱码
)
docs = loader.load() # 返回列表,只有一个元素
doc = docs[0]
print(doc.page_content) # 整个文件内容
print(doc.metadata) # {'source': './data/readme.txt'}
4. PyPDFLoader – 加载 PDF 文档
用途:读取 PDF 文件,默认按页拆分,每页生成一个 Document。
关键参数:mode("page" 按页,"single" 合并为单个 Document),extract_images(需 OCR 库,用于扫描件)。
依赖:需要安装 pypdf。
pip install pypdf
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
file_path="./data/report.pdf",
mode="page", # 默认按页,也可设为 "single" 合并
# extract_images=True # 提取图片中的文字(需额外OCR库)
)
docs = loader.lazy_load() # 每页一个 Document
for doc in docs:
print(doc)
小结
| 加载器 | 输入格式 | 输出单位 | 典型场景 |
|---|---|---|---|
| CSVLoader | .csv |
每行 | 表格数据、用户信息 |
| JSONLoader | .json |
按 jq 规则提取 | API 响应、配置文件 |
| TextLoader | .txt/.md |
整个文件 | 文档、代码、纯文本笔记 |
| PyPDFLoader | .pdf |
默认每页 | 学术论文、合同、多页文档 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)