OK啊昨天Day4-2,最后提及了很多的一些Loader加载器,有文档类型、数据库类型、网页加载器类型等等,它们其实都是属于langchain_community.document_loaders 这个包下的类。今天来先复习一下都有哪些,再讲讲其中的代码运行的基本框架,和文档中有图片的处理方式。
文件加载器(File Loaders)
Loader 类型 | 功能描述 |
---|---|
TextLoader | 加载纯文本文件(.txt) |
CSVLoader | 解析 CSV 文件,按行生成 Document |
PyPDFLoader | 提取 PDF 文本及元数据(基于 PyPDF2) |
Docx2txtLoader | 读取 Word 文档(.docx) |
UnstructuredFileLoader | 通用文件解析(支持多种格式) |
网页加载器(Web Loaders)
Loader 类型 | 功能描述 |
---|---|
WebBaseLoader | 抓取网页文本内容 |
SeleniumLoader | 处理需要 JavaScript 渲染的页面 |
数据库加载器(Database Loaders)
Loader 类型 | 功能描述 |
---|---|
SQLDatabaseLoader | 执行 SQL 查询并加载结果 |
MongoDBLoader | 从 MongoDB 中读取数据 |
通用参数
基本代码框架(其实就是导包+前面两行就加载好了文档,类型就是对应的TextLoader类)
from langchain_community.document_loaders import TextLoader
# 文本加载
loader = TextLoader("data/test.txt") # 通用参数就是放到这个函数中的
documents = loader.load()
print(documents)
print(len(documents)) #长度
print(documents[0].page_content[:100]) # 打印前100个字符
print(documents[0].metadata) # 输出: {'source': 'data/test.txt'}
基本代码框架
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader("data/test.csv", csv_args={"delimiter": ","}) # 指定划分规则
documents = loader.load()
# 每行转换为一个Document, metadata包含行号
print(len(documents))
print(documents[0].metadata) # 输出: {'source': 'data.csv', 'row': 0}
print(documents[0].page_content)
还可以指定列名,按行生成文档
from langchain_community.document_loaders import CSVLoader
#loader = CSVLoader("data/test.csv", csv_args={"delimiter": ","})
loader = CSVLoader("data/test.csv", csv_args={"fieldnames": ["产品名称", "销售数量", "客户名称"]})
documents = loader.load()
# 每行转换为一个Document, metadata包含行号
print(len(documents))
print(documents[0].metadata) # 输出: {'source': 'data.csv', 'row': 0}
print(documents[0].page_content)
其实看名称就知道是用来处理JSON格式数据,所以对于后端和前端来说这个都是比较重要的,对于爬虫来说这个数据加载器也是必须,必须,必须掌握的一个
它的一些参数也是比较多的,其实上面两种文档加载器还有很多的参数说明,具体的可以看看Langchain的官网
[https://python.langchain.ac.cn/docs/integrations/document_loaders/]:
可以从这上面获取到对于文档加载器的参数配置,OK回归正题看看JSONLOAD的基本参数
参数名 | 类型 | 必选 | 说明 |
---|---|---|---|
file_path | str | ✅ | JSON 文件路径 |
jq_schema | str | ✅ | jq 查询语法,定义数据提取逻辑 |
content_key | str | ❌ | 指定作为文本内容的字段(默认直接使用提取到的值) |
metadata_func | Callable | ❌ | 自定义元数据处理函数 |
text_content | bool | ❌ | 是否将提取内容强制转为字符串(默认 True) |
必选参数 jq_schema解释
必须使用 jq_schema 语法指定数据提取路径。
支持更复杂的 JSON 结构解析。
jq 语法常用模式
场景 | jq_schema 示例 | 说明 |
---|---|---|
提取根级数组 | .[] | 适用于 JSON 文件本身是数组 |
嵌套对象提取 | .data.posts [].content | 提取 data.posts 下的 content |
条件过滤 | .users [] | select (.age> 18) 筛选年龄大于 18 的用户 |
多字段合并 | {name: .username, email: .contact} | 组合多个字段为对象 |
为了处理还需要安装依赖包
pip install jq
基本代码框架
from langchain_community.document_loaders import JSONLoader
loader = JSONLoader(
file_path="data/test.json",
jq_schema=".articles[]", # 提取articles数组中的每个元素
content_key="content" # 指定content字段作为文本内容
)
docs = loader.load()
print(len(docs))
print(docs[0])
它能将PDF按照页拆分成多个Document对象,每个对象包含页面文本和元数据(如页码,来源路径等)
安装依赖库
pip install pypdf
基本代码框架
from langchain_community.document_loaders import PyPDFLoader
# PDF加载
loader = PyPDFLoader("data/test.pdf") # 这个文件可以自己随便找的
# 加载文档并按页分割
pages = loader.load() # 返回Document对象列表
# 查看页数
print(f"总页数:{len(pages)}")
# 访问第一页内容
page_content = pages[0].page_content
metadata = pages[0].metadata
print(f"第一页内容:\n{page_content[:200]}...") # 预览前200字符
print(f"元数据:{metadata}")
按需加载通过load()方法的参数控制加载范围
# 加载指定页码范围 (eg加载第二页到第四页)
pages = loader.load({1,2,3}) # 页面索引从0开始
提取所有文本合并为单个文档,若需将全部页面内容合并成一个字符串
full_text = "\n\n".join([page.page_content for page in pages])
print(f"合并后的全文长度:{len(full_text)} 字符")
简介: Loader 进阶 - PDF 文档里面的图片提取解析
如何提取 PDF 里面的图片文案?
extract_images
参数为True
。RapidOCR-ONNXRuntime 介绍
是一个基于 ONNX Runtime 推理引擎的轻量级 OCR(光学字符识别)工具库,专注于高效、跨平台部署。
它是 RapidOCR 项目的一个分支,实现了更高的推理速度和更低的资源占用。
特点:
RapidOCR-ONNXRuntime 与其他主流 OCR 工具的对比:
工具 | 引擎 | 速度 | 准确率 | 语言支持 | 依赖项 | 适用场景 |
---|---|---|---|---|---|---|
RapidOCR-ONNXRuntime | ONNX Runtime | ⭐⭐⭐⭐ | ⭐⭐⭐ | 多语言 | 少 | 跨平台、轻量级部署 |
Tesseract | 自研引擎 | ⭐⭐ | ⭐⭐ | 多语言 | 多 | 历史项目、简单场景 |
EasyOCR | PyTorch | ⭐⭐ | ⭐⭐⭐ | 多语言 | 多 | 快速原型开发 |
Microsoft Read API | 云端服务 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 多语言 | 无 | 企业级、高并发云端需求 |
这个根据实际的应用场景去选择对应的工具处理图片,不能说只是知道一个RapidOCR-ONNXRuntime工具还需要多方面的去了解不同的处理工具应用的优劣
RapidOCR-ONNXRuntime安装的依赖包
pip install rapidocr-onnxruntime
安装完依赖包之后就可以正常的直接去访问PDF文件,然后参数当中将extract_images = True(它默认其实就是关闭的)
基本的代码框架
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("data/pdf-img.pdf", extract_images=True)
pages = loader.load()
print(pages[0].page_content)
Docx2txtLoader 介绍
安装依赖库
pip install docx2txt # 核心文本提取库
基本代码案例框架
from langchain_community.document_loaders import Docx2txtLoader
# 初始化加载器,传入文件路径
loader = Docx2txtLoader("data/test.docx")
# 加载文档(返回单个Document对象)
documents = loader.load()
# 查看内容
print(f"文本长度: {len(documents[0].page_content)} 字符")
print(f"前200字符预览:\n{documents[0].page_content[:200]}...")
print(f"元数据: {documents[0].metadata}")
from langchain_community.document_loaders import Docx2txtLoader
import os
folder_path = "data/"
all_docs = []
# 遍历文件夹内所有.docx文件
for file in os.listdir(folder_path):
if file.endswith('.docx'):
file_path = os.path.join(folder_path, file)
loader = Docx2txtLoader(file_path)
docs = loader.load()
all_docs.extend(docs)
WebBaseLoader 是 LangChain 中用于抓取静态网页内容的文档加载器。
通过 HTTP 请求直接获取网页 HTML,并提取其中的文本内容(自动清理标签、脚本等非文本元素)。
生成包含网页文本和元数据的 Document 对象。
适用于新闻文章、博客、文档页面等静态内容的快速提取。
场景:
安装依赖库
pip install beautifulsoup4 # HTML解析依赖(默认已包含)
pip install requests # 网络请求依赖(默认已包含)
目标网页要求:
这边就只介绍这个静态加载器吧,对于动态页面加载可以去看看百度博客园等网站的消息去学习
基本代码案例
import os
#代码中设置USER_AGENT,设置USER_AGENT的代码一定要放在WebBaseLoader这个包前面,不然还是会报错
os.environ['USER_AGENT'] = 'Mozilla/5.0 (Windows NT 14.0; Win64; x64) AppleWebKit/567.36 (KHTML, like Gecko) Chrome/58.0.444.11 Safari/337.3'
from langchain_community.document_loaders import WebBaseLoader
#警告日志信息: USER_AGENT environment variable not set, consider setting it to identify your requests.
# 初始化加载器,传入目标URL列表(可多个)
urls = ["https://www.cnblogs.com"]
loader = WebBaseLoader(urls)
# 加载文档(返回Document对象列表)
docs = loader.load()
#查看结果
print(f"提取的文本长度:{len(docs[0].page_content)} 字符")
print(f"前200字符预览:\n{docs[0].page_content[:200]}...")
print(f"元数据:{docs[0].page_content[:200]}...")
import os
#代码中设置USER_AGENT,设置USER_AGENT的代码一定要放在WebBaseLoader这个包前面,不然还是会报错
os.environ['USER_AGENT'] = 'Mozilla/5.0 (Windows NT 14.0; Win64; x64) AppleWebKit/567.36 (KHTML, like Gecko) Chrome/58.0.444.11 Safari/337.3'
from langchain_community.document_loaders import WebBaseLoader
#警告日志信息: USER_AGENT environment variable not set, consider setting it to identify your requests.
# 初始化加载器,传入目标URL列表(可多个)
urls = ["https://www.cnblogs.com","XXXXXXXX"]
loader = WebBaseLoader(urls)
# 加载文档(返回Document对象列表)
docs = loader.load()
for doc in docs:
print(f"- {doc.metadata['source']}")