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

【RAG文档处理】文档加载模块:连接数据与智能应用的桥梁

一、引言

在当今人工智能技术高速发展的浪潮中,文档加载模块作为连接原始数据与智能应用的桥梁,正发挥着不可替代的作用。以LangChain为代表的框架,通过其强大的文档加载器(Document Loaders)模块,为开发者提供了一套标准化、可扩展的数据处理解决方案。

该模块不仅支持从本地文件、网页到云端数据库等20+种数据源的加载能力,更通过统一的Document对象实现了异构数据格式的归一化处理。无论是简单的TXT文本还是包含复杂表格的PDF文档,亦或是嵌入代码段的Markdown文件,该模块都能通过自动识别文件类型、智能解析内容结构,将原始数据转化为携带语义信息和元数据特征的标准化对象。

这种将非结构化数据转化为机器可理解格式的能力,为后续的文本分割、向量化存储和语义检索等RAG(检索增强生成)流程奠定了坚实基础。
RAG

二、安装与导入

安装库:

pip install langchain-community  # 安装依赖

验证安装:

from langchain_community.document_loaders import DirectoryLoader

三、基本用法

(一)加载目录下的所有文件(需指定文档类型)

loader = DirectoryLoader(
    path="./data",  # 目录路径
    glob="**/*.txt",  # 匹配所有txt文件
    show_progress=True,  # 显示加载进度
    use_multithreading=True,  # 多线程加速
    loader_cls=TextLoader  # 指定文本加载器
)
documents = loader.load()

(二)递归子目录

loader = DirectoryLoader(
    path="./data",
    glob="**/*.pdf",  # 递归匹配所有子目录的PDF文件
    recursive=True
)

四、支持的文档格式

(一)文本文件(TXT)

from langchain_community.document_loaders import TextLoader

loader = DirectoryLoader(
    path="./data", 
    glob="**/*.txt",
    loader_cls=TextLoader
)

(二)PDF文件

from langchain_community.document_loaders import PyPDFLoader

loader = DirectoryLoader(
    path="./data",
    glob="**/*.pdf",
    loader_cls=PyPDFLoader,
    loader_kwargs={"password": "1234"}  # 可选:加密PDF的密码
)

(三)Word文档(DOCX):不兼容DOC文件,建议DOC文档先转为DOCX格式

from langchain_community.document_loaders import Docx2txtLoader

loader = DirectoryLoader(
    path="./data",
    glob="**/*.docx",
    loader_cls=Docx2txtLoader
)

(四)CSV文件

from langchain_community.document_loaders import CSVLoader

loader = DirectoryLoader(
    path="./data",
    glob="**/*.csv",
    loader_cls=CSVLoader,
    loader_kwargs={"source_column": "text"}  # 指定文本来源列
)

(五)Markdown(MD)

from langchain_community.document_loaders import UnstructuredMarkdownLoader

loader = DirectoryLoader(
    path="./data",
    glob="**/*.md",
    loader_cls=UnstructuredMarkdownLoader
)

(六)HTML文件

from langchain_community.document_loaders import BSHTMLLoader

loader = DirectoryLoader(
    path="./data",
    glob="**/*.html",
    loader_cls=BSHTMLLoader
)

(七)JSON文件

from langchain_community.document_loaders import JSONLoader

loader = DirectoryLoader(
    path="./data",
    glob="**/*.json",
    loader_cls=JSONLoader,
    loader_kwargs={
        "jq_schema": ".content",  # 使用jq语法提取内容
        "text_content": False
    }
)

五、高级用法

(一)混合格式文档处理

若目录包含多种格式,需自定义逻辑:

import os
from langchain_community.document_loaders import (
    PyPDFLoader, Docx2txtLoader, TextLoader
)

loaders = {
    ".pdf": PyPDFLoader,
    ".docx": Docx2txtLoader,
    ".txt": TextLoader
}

documents = []
for root, _, files in os.walk("./data"):
    for file in files:
        ext = os.path.splitext(file)[1].lower()
        if ext in loaders:
            path = os.path.join(root, file)
            loader = loaders[ext](path)
            documents.extend(loader.load())

(二)元数据处理

大多数加载器会自动提取元数据(如文件名、路径):

for doc in documents:
    print(doc.page_content)  # 文档内容
    print(doc.metadata["source"])  # 文件路径

六、注意事项

(一)依赖安装

  • PDF: pip install pypdf
  • Word: pip install docx2txt
  • HTML: pip install beautifulsoup4
  • Markdown/通用格式: pip install unstructured

(二)大文件处理

  • 使用 use_multithreading=True 加速加载。
  • 对超大PDF或HTML,分块加载避免内存溢出。

(三)错误处理

loader = DirectoryLoader(
    path="./data",
    glob="**/*.pdf",
    silent_errors=True  # 忽略错误文件
)

七、通用加载器(Unstructured)

对未明确支持的格式,可使用 UnstructuredFileLoader 处理多种类型(需安装 unstructured):

from langchain_community.document_loaders import UnstructuredFileLoader

loader = DirectoryLoader(
    path="./data",
    glob="**/*",
    loader_cls=UnstructuredFileLoader,
    loader_kwargs={"mode": "elements"}  # 分块模式
)

八、类CSVLoader与UnstructuredCSVLoader的区别及适用场景

(一)核心区别

特性CSVLoaderUnstructuredCSVLoader
底层依赖基于 pandas基于 unstructured
数据结构处理将 CSV 解析为结构化 DataFrame按非结构化文本处理,保留原始表格结构
输出格式每行转为纯文本(如 "列名: 值"保留行列索引、合并单元格等元数据
性能高效(适合大型文件)较慢(逐行解析非结构化数据)
适用场景结构化数据分析需求复杂表格解析或元数据管理需求

(二)场景选择建议

1. 使用 CSVLoader 的场景

需求简单:仅需提取 CSV 中的纯文本内容,无需保留表格结构。
数据分析导向:需要对 CSV 进行统计、过滤或聚合操作(利用 pandas 的功能)。
大文件处理:处理百万行级 CSV 文件时性能更优。
示例代码

from langchain_community.document_loaders import CSVLoader

# 按列名映射提取文本
loader = CSVLoader("data.csv", csv_args={"fieldnames": ["日期", "销售额"]})
docs = loader.load()
# 输出示例:Document(page_content="日期: 2023-01, 销售额: 150万", metadata={"source": "data.csv"})
2. 使用 UnstructuredCSVLoader 的场景

复杂表格结构:处理合并单元格、多级表头或非标准分隔符的 CSV。
元数据保留:需记录行列索引、表格标题等附加信息。
编码兼容性:自动处理未知编码或非 UTF-8 格式的文件。
示例代码

from langchain_community.document_loaders import UnstructuredCSVLoader

# 保留表格结构元数据
loader = UnstructuredCSVLoader("complex_data.csv")
docs = loader.load()
# 输出示例:Document(page_content="Alice", metadata={"source": "complex_data.csv", "row": 0, "col": 0})

(三)性能优化与注意事项

依赖安装
CSVLoader:需 pip install pandas
UnstructuredCSVLoader:需 pip install "unstructured[csv]"
编码处理:对中文文件,建议在 CSVLoader 中显式指定 encoding="utf-8"
错误处理:使用 try-except 捕获加载异常,避免单文件失败影响整体流程 。


通过灵活配置 DirectoryLoader,可高效加载多种文档格式,适合RAG应用、数据分析等场景,可根据具体需求调整加载策略和参数。

相关文章:

  • 关于我和快速幂的事()
  • CF576A Vasya and Petya‘s Game 题解
  • Day15:二叉树的后续遍历序列
  • DeepSeek刷力扣辅助题单 存留记录
  • C++中的const与类型转换艺术
  • Json 转义符号处理(Mongo changeStream op log)
  • SAP访问外围系统(http/https)
  • Android笔记:Android平台下SVG格式的解析与实践
  • ardunio R4 WiFi连接实战
  • 《Transformer如何进行图像分类:从新手到入门》
  • 人工智能基础知识笔记四:聚类分析
  • HOT100——二叉树篇Leetcode236. 二叉树的最近公共祖先
  • 【H2O2 | 软件开发】Axios发送Http请求
  • 队列的简单例题
  • cyberstrikelab lab2
  • 星越L_发动机舱开启及油液加注讲解
  • sqldef:一款免费的数据库变更管理工具
  • 基于llama_cpp 调用本地模型(llama)实现基本推理
  • Redis三大件 穿透、雪崩、击穿
  • 蓝桥杯进制问题秒破解法|冲击省一题单(二)
  • phpcms网站打不开/百度官方客服电话
  • 建站行业有哪些/百度搜索广告投放
  • 做网站公司哪家正规/无锡网络推广外包
  • 浙江省杭州市建设厅网站/优化关键词排名的工具
  • 黑龙江省建设工程交易中心网站/google海外版
  • 个人做慈善网站/网站页面seo