首页/AI/RAG 与向量库速查/Unstructured 统一分区解析

Unstructured 统一分区解析

Unstructured 把不同格式文档切成带类型的元素(标题、段落、表格、列表项),便于按元素类型分别清洗与切分;fast 模式轻量,hi_res 模式调用版面模型。

RAG 与向量库速查AI更新于 2026-10-13

Unstructured 是什么

Unstructured 把不同格式的文档(PDF、DOCX、HTML、PPTX、邮件等)统一切成带类型的元素:标题、正文段落、表格、列表项、页眉页脚各有自己的 category。它的价值在于把“按格式分别写解析分支”的工作收敛成一套元素模型,后续清洗与切分可以按元素类型分别处理——比如表格整块保留、页眉页脚直接丢弃。fast 模式只做轻量文本抽取,hi_res 模式会调用版面模型做更精细的识别。

基本信息

入口函数unstructured.partition.auto.partition
策略strategy=fast(轻量)或 hi_res(版面模型)
元素类型Title、NarrativeText、Table、ListItem、Header 等
元素属性category、text、metadata(页码、文件名)
依赖hi_res 需要额外模型与系统库,离线需预置

典型使用场景

  • 格式杂乱的语料库:一套接口吃下 PDF、Word、HTML,减少维护分支
  • 按类型分流处理:表格单独转 Markdown,正文才进切片器
  • 丢弃噪声元素:识别出页眉页脚与页码类元素,整体过滤而非靠正则硬删
  • 元数据补全:元素自带页码与文件名,可直接写入切片元数据
  • 流程对照:先用 fast 跑通全量,再对解析质量差的文档局部切到 hi_res

分区与按类型处理

分区与按类型处理
from unstructured.partition.auto import partition

elements = partition(filename='report.pdf', strategy='fast')
for el in elements[:5]:
    print(el.category, '|', str(el)[:60])      # 元素类型与开头

tables = [el for el in elements if el.category == 'Table']
prose = [el for el in elements if el.category == 'NarrativeText']  # 只切正文

元素类型与处理建议

category含义入库处理
Title标题写成切片的标题路径元数据
NarrativeText正文段落按句子边界切分
Table表格整表保留或转 Markdown,不参与硬切
ListItem列表项尽量与所属小标题一起成块
Header/Footer页眉页脚整体过滤,避免混入正文
hi_res 精度更高但依赖更重、耗时更长:批量任务先在小样本上估算吞吐与失败率,再决定是否对全量启用,混用两种策略是常见的折中做法。元素自带 metadata 中的页码与文件名要一并写入切片元数据,否则后期引用与排查都缺定位信息。

易错点

  • 把 Table 元素当普通段落切分,表格结构被切碎,数字行列对不上
  • hi_res 首次运行要下载模型,内网环境未预置直接报错中断流水线
  • 页眉页脚未被过滤,跨页重复文本进入索引,检索命中大量无信息片段
  • 元素顺序被忽略,直接按文件行序拼接导致阅读顺序错乱
  • 只统计元素数量不抽检内容,模型升级后解析质量变化无人察觉
  • 元素的 category 判断依赖模型版本,升级后分类口径变化会让过滤规则失效,清洗逻辑要跟着回归

数据来源与参考

  • Unstructured 官方文档(docs.unstructured.io)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌