LangChain 文档加载器学习总结
各文件知识点总结
1. markdown_loader_example.py
是什么: Markdown 文件专用加载器
有什么用: 将 .md 文件转换为 LangChain 可处理的 Document 对象
核心类: UnstructuredMarkdownLoader
示例代码:
from langchain_community.document_loaders import UnstructuredMarkdownLoader
loader = UnstructuredMarkdownLoader("./项目API资料.md")
documents = loader.load()
print(documents) # 查看 Document 对象
print(len(documents)) # 查看文档数量
print(documents[0].metadata) # 查看元数据
2. Office文档.py
是什么: Microsoft Office 文档加载器集合
有什么用: 加载 Excel、Word、PPT 等常见 Office 文件
核心类:
UnstructuredExcelLoader- Excel 表格UnstructuredWordDocumentLoader- Word 文档UnstructuredPowerPointLoader- PowerPoint 演示文稿
示例代码:
from langchain_community.document_loaders import (
UnstructuredExcelLoader,
UnstructuredWordDocumentLoader,
UnstructuredPowerPointLoader
)
# PowerPoint 示例
ppt_loader = UnstructuredPowerPointLoader("./章节介绍.pptx", mode="elements")
ppt_document = ppt_loader.load()
print(ppt_document)
print(len(ppt_document))
print(ppt_document[0].metadata)
重要参数:
mode="elements": 按元素分割文档(如按幻灯片、段落等)mode="single": 作为单个文档加载(默认)
3. URL网页加载器.py
是什么: 网页内容加载器
有什么用: 直接从 URL 抓取网页内容并转换为 Document 对象
核心类: WebBaseLoader
示例代码:
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://imooc.com")
documents = loader.load()
print(documents)
print(len(documents))
print(documents[0].metadata)
特点:
- 自动处理 HTML 解析
- 提取网页主要文本内容
- metadata 中包含 URL 来源信息
4. 通用文件加载器.py
是什么: 通用文件加载器,支持多种文件格式
有什么用: 当不知道文件类型或需要统一处理时使用
核心类: UnstructuredFileLoader
示例代码:
from langchain_community.document_loaders import UnstructuredFileLoader
loader = UnstructuredFileLoader("./项目API资料.md")
documents = loader.load()
print(documents)
print(len(documents))
print(documents[0].metadata)
适用场景:
- 文件类型不确定时
- 需要统一接口处理多种文件
- 快速原型开发
核心概念
Document 对象结构
所有加载器返回的 Document 对象包含两个主要属性:
Document(
page_content="文档的文本内容",
metadata={
"source": "文件路径或URL",
"file_path": "完整文件路径",
# 其他元数据...
}
)
- page_content: 文档的实际文本内容
- metadata: 文档元数据(来源、类型、创建时间等)
加载器对比
| 加载器 | 适用文件类型 | 优势 | 使用场景 |
|---|---|---|---|
| UnstructuredMarkdownLoader | .md | 针对 Markdown 优化 | 技术文档、笔记 |
| UnstructuredExcelLoader | .xlsx, .xls | 表格数据处理 | 数据分析、报表 |
| UnstructuredWordDocumentLoader | .docx | Word 文档处理 | 正式文档、合同 |
| UnstructuredPowerPointLoader | .pptx | 按幻灯片分割 | 演示文稿处理 |
| WebBaseLoader | 网页 URL | 直接抓取网页 | 在线内容采集 |
| UnstructuredFileLoader | 通用 | 自动识别类型 | 不确定文件类型时 |
应用场景
这些文档加载器主要用于:
-
构建 RAG 系统(检索增强生成)
- 将各类文档加载到向量数据库
- 为 LLM 提供外部知识
-
知识库文档预处理
- 企业文档库搭建
- 智能问答系统
-
多源数据整合
- 统一处理不同格式的数据源
- 批量文档处理
-
向量数据库的数据准备
- 文档 Embedding 转换前的预处理
- 构建语义搜索索引
学习要点
- 选择合适的加载器可以大幅简化文档处理流程
- 注意
mode参数的使用(elements vs single) - metadata 信息对文档溯源很重要
- 加载后的文档通常需要配合 TextSplitter 进行分割
自定义文档加载器
from typing import Iterable, AsyncIterator
from langchain_core import document_loaders
from langchain_core.document_loaders import BaseLoader
from langchain_core.documents import Document
class CustomDocumentLoader(BaseLoader):
def __init__(self, file_path: str):
self.file_path = file_path
def lazy_load(self) -> Iterable[Document]:
with open(self.file_path, "r", encoding="utf-8") as f:
line_number = 0
for line in f:
line_number += 1
yield Document(
page_content=line,
metadata={"score": self.file_path,"line_number": line_number}
)
line_number += 1
async def alazy_load(self) -> AsyncIterator[Document]:
import aiofiles
async with aiofiles.open(self.file_path, "r", encoding="utf-8") as f:
line_number = 0
async for line in f:
line_number += 1
yield Document(
page_content=line,
metadata={"score": self.file_path,"line_number": line_number}
)
line_number += 1
import os
script_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(script_dir, "./test.txt")
loader = CustomDocumentLoader(file_path)
documents = loader.load()
print(documents)
print(len(documents))
print(documents[0].metadata)