介绍
基于 docx2txt 库封装的 Word 文件加载器,继承自 LangChain BaseLoader,输出标准化 Document 对象;
提取 .docx 文件中的纯文本内容(忽略图片、表格格式,仅保留文本和段落分隔);
优势
轻量、速度快、依赖少(仅需 docx2txt 库);
⚠️ 局限
- 仅支持 .docx 格式,不支持 .doc 旧格式;
- 不保留表格、图片、公式等非文本内容(表格会转为纯文本分行显示);
- 元数据仅包含文件路径,无页码、段落等详细信息。
适用场景
- 快速提取 Word 文档纯文本(如报告、合同、笔记);
- 对格式无要求的 Word 文档问答/总结;
- 批量处理大量简单 Word 文档(如企业规章制度、员工手册)。
不适用场景
- 需要保留表格结构、图片描述的复杂 Word 文档;
- 需提取页码、字体样式等格式信息的场景(建议用
UnstructuredWordDocumentLoader); - 处理 .doc 旧格式文件(需先转换为 .docx)。
安装
pip 安装
pip install docx2txt
poetry 虚拟环境安装
poetry add docx2txt
使用
创建对象
Docx2txtLoader(file_path=word文件路径)
关键参数:
file_path(必填):.docx 文件的路径(绝对路径/相对路径,如"企业报告.docx");
load():一次性加载小文件
同步加载整个 .docx 文件的纯文本内容
返回值: List[Document](默认1个 Document)。
提示:搭配
DirectoryLoader使用时,会有多个Document
使用场景:
- 小文件(几KB~几十KB,如短篇企业报告、规章制度);
- 快速验证加载效果、提取纯文本;
- 无需分批处理的场景。
特点:
- 最简单、最常用,开箱即用;
- 返回的 Document 包含:
page_content(全部纯文本)、metadata(仅文件路径)。
例子
from langchain_community.document_loaders import Docx2txtLoader
# 1. 初始化加载器(指定文件路径+编码)
loader = Docx2txtLoader(
file_path="../../企业报告(短).docx", # 必传:Word文件路径
)
# 2. 加载文件(核心通用方法)
# 一次性加载(小文件)
docs = loader.load()
print("docs类型:", type(docs))
print("docs长度:", len(docs))
print("元数据:", docs[0].metadata) # 元数据(仅包含文件路径)
print("-"*50)
print("文本内容:", docs[0].page_content) # 提取的纯文本
执行结果:
docs类型: <class 'list'>
docs长度: 1
元数据: {'source': '../../企业报告(短).docx'}
加载大文件
lazy_load():分批加载大文件
返回生成器,分批加载文件内容(原生默认仅1批,仍返回1个 Document ;需结合拆分逻辑才会多批)。
使用场景:
- 大体积 .docx 文件(如几十MB、万字以上报告);
- 内存敏感场景(如低配服务器);
- 需逐批处理文本的场景(如加载一批、拆分一批)。
特点:
- 内存友好,避免一次性加载大文件导致溢出;
- 生成器遍历方式:
for doc in loader.lazy_load():。
例子
from langchain_community.document_loaders import Docx2txtLoader
# 1. 初始化加载器(指定文件路径+编码)
loader = Docx2txtLoader(
file_path="../../企业报告(短).docx", # 必传:Word文件路径
)
# 2. 加载文件(核心通用方法)
# 方式2:分批加载(大文件,返回生成器)
docs = loader.lazy_load()
print("docs类型:", type(docs))
查看结果方式一
# 3. 查看结果方式一
for doc in docs:
print("-----元数据:", doc.metadata) # 元数据(仅包含文件路径)
print("文本内容:", doc.page_content) # 提取的纯文本
查看结果方式二
# 3. 查看结果方式二
# 获取唯一的 Document 对象
doc = next(docs)
print("-----元数据:", doc.metadata) # 元数据(仅包含文件路径)
print("文本内容:", doc.page_content) # 提取的纯文本
执行结果
docs类型: <class 'list_iterator'>
-----元数据: {'source': '../../企业报告(短).docx'}
下面是文件内容:略
方法选择
| 场景 | 首选方法组合 | 核心目的 |
|---|---|---|
| 小文件快速加载 | __init__() + load() |
简单提取纯文本 |
| 大文件内存友好加载 | __init__() + lazy_load() |
分批加载,避免溢出 |
| RAG 知识库构建(长文本) | __init__() + load() + 文本分割器 |
拆分文本,适配大模型 |
| 生产环境加载 | 上述组合 + 异常处理 | 保证程序健壮性 |
注意
Docx2txtLoader本身 无内置拆分方法,生成多个 Document 必须结合文本分割器;lazy_load()原生仅返回1批(1个 Document),需自定义扩展才会多批;- 所有方法均继承自
BaseLoader,和其他加载器(如 CSVLoader)用法完全统一,无需额外学习。
与其他 Word 加载器对比
| 加载器名称 | 核心差异 | 格式保留 | 依赖复杂度 | 速度 |
|---|---|---|---|---|
| Docx2txtLoader | 仅提取纯文本 | ❌ 无 | 低(仅docx2txt) | 快 |
| UnstructuredWordDocumentLoader | 保留基础段落/表格结构 | ✅ 基础 | 中(需unstructured) | 中 |
| PyMuPDFLoader(转换为PDF后加载) | 保留更多格式(需转PDF) | ✅ 较多 | 中(需PyMuPDF) | 中 |
常见问题
| 问题 | 解决方案 |
|---|---|
| 提取不到文本 | 确认文件是 .docx 格式(.doc 需转换),且文件未加密/损坏 |
| 大文件内存溢出 | 使用 lazy_load() 分批加载,而非 load() 一次性加载 |
| 需提取表格内容 | 先用 Docx2txtLoader 提取文本,再用大模型解析表格文本;或换用 UnstructuredWordDocumentLoader |
总结
- 核心三板斧:
__init__()(配置) +load()(小文件) +lazy_load()(大文件)是Docx2txtLoader的基础,覆盖80%场景; - 进阶必备:结合文本分割器拆分文本,是 RAG 场景的标配;
- 生产环境:补充异常处理,避免路径、权限、格式问题导致加载失败;
- 核心特点:所有方法均轻量、无冗余,聚焦「快速提取 Word 纯文本」的核心目标。