unstructured
将任意格式文档(PDF/Word/图片等)转换为干净结构化数据的开源 ETL 工具,是 RAG pi
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将任意格式文档(PDF/Word/图片等)转换为干净结构化数据的开源 ETL 工具,是 RAG pi
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:Unstructured 项目 Logo
想象一下:你要让 AI 阅读一份 200 页的 PDF 合同,或者从一张扫描件里提取发票信息,传统做法要写一堆正则表达式、调用各种专业解析库,还要处理编码问题、排版混乱、表格跨页……光是数据清洗就耗掉大半工程时间。
Unstructured 正是来解决这个痛点的:它把各种「乱七八糟」的原始文档——PDF、Word、PPT、扫描件、图片、HTML、Email——一股脑扔进去,吐出来的是干净的结构化数据,开发者可以直接喂给 RAG 系统或 AI 模型使用。
Unstructured 由 Unstructured Technologies 这家成立不久的公司主导维护,GitHub 仓库目前已有超过 14,700 个 Star,在开源文档处理领域属于头部项目。公司核心团队在 LLM 应用和企业数据处理方面有深厚积累。
项目的诞生背景是:大语言模型(LLM)快速普及,但模型理解非结构化数据的能力仍然有限。在 RAG(检索增强生成)技术路线中,如何将 PDF、PPT、邮件等原始文件转化为可供向量检索的文本块,是整个 pipeline 的关键瓶颈。Unstructured 应运而生,专攻「文档清洗 + 结构化」这个中间层。
目前该团队已推出商业化产品 Unstructured Platform,提供企业级托管服务、向量嵌入生成、图像与表格内容增强等功能,形成「开源库 + 商业平台」的双层商业模式。开源库负责底层解析能力,平台负责生产级 pipeline 编排。
Unstructured 的核心工作流程分为三个阶段:
第一步:格式识别(File Type Detection)
通过 libmagic 库检测文件 MIME 类型,即使是重命名过的文件也能准确识别内容格式。这步保证了后续解析器不会被文件扩展名误导。
第二步:内容解析(Partition)
根据文件类型调用对应解析器,将原始文件拆解为语义单元(Element)。支持的格式覆盖了日常办公场景的方方面面:
PDF/图片:调用 pypdf、pdfminer 或 pikepdf 提取文本;若文件是扫描件(无文字层),则使用 Tesseract OCR 识别。
Word (DOCX):python-docx 库直接读取 XML 结构,保留标题层级、表格格式。
PowerPoint (PPTX):提取每页文本和嵌入图片。
HTML/XML:html5lib 解析 DOM 树,分离正文与噪音内容。
纯文本/CSV/TSV:正则分块,识别标题行与数据行。
Email (EML):解析 RFC 822 格式,提取正文、附件和元信息。
EPUB/Markdown/RST/ODT:pandoc 统一转换为中间格式再处理。
第三步:元素后处理(Cleaners & Chunking)
解析后的元素会经过 Cleaner 模块:去除冗余空行、统一编码格式、过滤页眉页脚等噪音内容。之后通过 Chunking 模块将长文本切分成适合 LLM context 窗口的小块——这一步对 RAG 系统至关重要,切块策略直接影响检索质量。
Unstructured 的代码架构是典型的插件化设计:
| 模块 | 职责 |
|---|---|
partition/ | 各类文档解析器,每种格式一个文件 |
chunking/ | 文本切分策略(按字符数/段落/标题层级等) |
cleaners/ | 清洗规则(去噪音、格式标准化) |
embed/ | 向量嵌入接口,支持 OpenAI/HuggingFace/VertexAI 等 |
staging/ | 导出到各类 ML 平台(LangChain/HuggingFace/Prodigy 等) |
models/ | 内置 CV/NLP 模型推理 |
nlp/ | spaCy NLP 管道(实体识别、句子分割) |
所有 partition 函数遵循统一接口规范,外部调用只需一行 partition.auto() 即可自动识别类型并解析,降低了使用门槛。内部实现大量依赖 requests 与官方 unstructured-client SDK,支持连接 Unstructured 官方托管 API 做云端加速解析。
依赖方面,主库仅需 beautifulsoup4、lxml、regex、requests 等轻量级库;可选依赖按文档类型分组安装(pip install unstructured[pdf]、pip install unstructured[docx]),避免一次性拉取过多包。NLP 部分使用 spaCy 做实体识别和句子边界检测。
Unstructured 提供两种部署方式:
方式一:Docker 容器(推荐)
官方维护多架构镜像(x86_64 + Apple Silicon),一行命令即可拉取:
docker pull downloads.unstructured.io/unstructured-io/unstructured:latest
docker run -dt --name unstructured downloads.unstructured.io/unstructured-io/unstructured:latest
docker exec -it unstructured bash
容器基于 wolfi-base(Chainguard 的最小化安全基础镜像),预装了 Tesseract OCR 训练数据、LibreOffice、pandoc 等所有系统依赖。进入容器后即可直接运行 partition 代码,无需配置 Python 环境。
方式二:pip 安装
pip install unstructured[all-docs]
pip 方式需要手动安装系统依赖(Linux 下需要 libmagic-dev、poppler-utils、tesseract、tesseract-lang、libreoffice 等),文档中有详细的各平台安装指南。
两种方式均无需 GPU,适合在 CPU 环境下批量处理文档。解析速度取决于文档复杂度,文字型 PDF 通常在秒级完成,扫描件因涉及 OCR 会更慢一些。
Unstructured 与主流 LLM 开发框架有深度集成。在 staging/ 目录下,提供了导出到 LangChain Document Loader 的适配器,这意味着在 LangChain 的 RAG chain 中可以这样使用:
from langchain.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = UnstructuredFileLoader('contract.pdf')
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 后续接 embeddings + vectorstore 构建检索 pipeline
同样的方式也支持 HuggingFace datasets、Prodigy、Argilla 等训练/标注平台,形成了从「原始文档」到「训练数据」的完整工具链闭环。
尽管 Unstructured 功能强大,使用时仍需注意以下几点:
1. 复杂排版 PDF 仍是挑战:对于表格跨页、图文混排严重、多栏排版的学术论文,解析效果可能不如商用 PDF 处理库(如 PDFix)。建议结合布局分析模型(LayoutLM、Donut)做二次校正。
2. 扫描件 OCR 依赖 Tesseract 质量:Tesseract 对中文识别率有限,如果处理中文扫描文档,可能需要额外训练模型或接入 Google Cloud Vision API(通过 unstructured[image] 扩展)。
3. 内存占用:处理大批量文档时,每个文档都会加载完整内容到内存,对于超长 PDF(>500页)需注意内存管理。
4. 许可证:采用 Apache 2.0,可商用,但若使用商业平台 API 则需遵守其定价策略。
Unstructured 的出现填补了开源社区在「文档 ETL」领域的空白。2023-2025 年间,随着 RAG 技术成为 LLM 应用的主流架构,如何高效预处理非结构化文档成为刚需。传统方案需要组合 PyMuPDF + python-docx + python-pptx + OCR 等多个库,维护成本高;Unstructured 用统一 API 解决了这个问题。
从增长曲线看,该项目 Star 增速平稳上升,GitHub 活跃度在同类项目中处于高位,说明社区反馈积极。LangChain、HuggingFace 官方文档中均推荐 Unstructured 作为文档加载方案,进一步巩固了其生态位。
未来趋势上,Unstructured 正在向「多模态文档理解」方向发展——不仅解析文字,还识别文档中的图表、签名、手写内容,并生成结构化的语义标签。这与当前 Document AI(文档智能)大模型(如 Microsoft LayoutLM、DeepDoc)的方向高度一致。
对于 AI 开发者而言,Unstructured 是构建 RAG pipeline 时值得优先考虑的文档预处理工具;对于 AI 爱好者,它展示了如何用工程手段弥补 LLM「天生爱读乱文件」的短板——让 AI 先「看懂」文件,再谈理解和生成。