Java+Python智能化云盘【Day5-1】

RAG 系统链路和数据加载 Loaders 技术

OK啊昨天Day4-2,最后提及了很多的一些Loader加载器,有文档类型、数据库类型、网页加载器类型等等,它们其实都是属于langchain_community.document_loaders 这个包下的类。今天来先复习一下都有哪些,再讲讲其中的代码运行的基本框架,和文档中有图片的处理方式。

Loader 的分类与常见类型

文件加载器(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 中读取数据

文档加载器File Loaders

TextLoader-纯文本加载器

通用参数

  • encoding: 文件编码(默认 utf-8)
  • autodetect_encoding: 自动检测编码(如处理中文乱码)

基本代码框架(其实就是导包+前面两行就加载好了文档,类型就是对应的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'}

CSVLoader - 加载 CSV 文件

基本代码框架

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) 

JSONLoader-JSON格式数据加载

其实看名称就知道是用来处理JSON格式数据,所以对于后端和前端来说这个都是比较重要的,对于爬虫来说这个数据加载器也是必须,必须,必须掌握的一个

它的一些参数也是比较多的,其实上面两种文档加载器还有很多的参数说明,具体的可以看看Langchain的官网

[https://python.langchain.ac.cn/docs/integrations/document_loaders/]:

Java+Python智能化云盘【Day5-1】_第1张图片

可以从这上面获取到对于文档加载器的参数配置,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])

pyPDFLoader-加载PDF文件

它能将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 文档里面的图片提取解析

简介: Loader 进阶 - PDF 文档里面的图片提取解析

如何提取 PDF 里面的图片文案?

  • PyPDFLoader 仅提取文本,如果没配置第三方类库则会提取不了对应的图片文案。
  • 需结合其他库(如 camelot、pdfplumber、rapidocr-onnxruntime)提取表格或图像。
  • 如果需要提取,安装好依赖库后,设置extract_images参数为True

RapidOCR-ONNXRuntime 介绍

  • 是一个基于 ONNX Runtime 推理引擎的轻量级 OCR(光学字符识别)工具库,专注于高效、跨平台部署。

  • 它是 RapidOCR 项目的一个分支,实现了更高的推理速度和更低的资源占用。

  • 特点:

    • 跨平台支持:支持 Windows、Linux、macOS,以及移动端(Android/iOS)和嵌入式设备。
    • 多语言识别:支持中文、英文、日文、韩文等多种语言,尤其擅长中英混合文本。
    • 轻量级:模型体积小(约几 MB),适合资源受限的环境。
    • 预处理与后处理集成:内置图像预处理(如二值化、方向校正)和文本后处理(如去除冗余字符)。

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 -Word文档加载器

Docx2txtLoader 介绍

  • 是 LangChain 中专门用于加载 Microsoft Word 文档(.docx)的文档加载器,不能是旧版本的doc格式word。
  • 提取文档中的纯文本内容(包括段落、列表、表格文字等),忽略复杂格式(如字体、颜色),生成统一的 Document 对象。
  • 适用于从 Word 报告中快速提取结构化文本。

安装依赖库

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)

网页加载器 Web Loader

WebBaseLoader-静态网页加载器

简介: Web 网页加载器 WebBaseLoader 案例实战

什么是 WebBaseLoader
  • WebBaseLoader 是 LangChain 中用于抓取静态网页内容的文档加载器。

  • 通过 HTTP 请求直接获取网页 HTML,并提取其中的文本内容(自动清理标签、脚本等非文本元素)。

  • 生成包含网页文本和元数据的 Document 对象。

  • 适用于新闻文章、博客、文档页面等静态内容的快速提取。

  • 场景:

    • 知识库构建(知识问答、企业知识库)、舆情监控(新闻 / 社交媒体分析)。
    • 竞品分析(产品功能 / 价格监控)、SEO 内容聚合 。

安装依赖库

pip install beautifulsoup4  # HTML解析依赖(默认已包含)
pip install requests        # 网络请求依赖(默认已包含)

目标网页要求:

  • 无需 JavaScript 渲染(动态内容需改用 SeleniumURLLoader,但是很鸡肋,少用)。
  • 未被反爬虫机制拦截(如需要,需配置代理或请求头) 。
  • 如果动态网页,且内容提取好,还是需要单独针对不同的网站写代码进行提取内容。

这边就只介绍这个静态加载器吧,对于动态页面加载可以去看看百度博客园等网站的消息去学习

基本代码案例

  • 加载单个网页
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']}")

你可能感兴趣的:(Java+Python,Ai智能云盘项目开发专栏,python,java,开发语言)