文档解析方案 v1¶
1. 方案目标¶
针对不同文档格式直接使用对应的原生解析库,避免依赖 LibreOffice 做格式转换,降低多图文档卡住、转换超时和 Docker 构建体积过大的风险。
当前方案优先保证文本、段落和复杂表格结构的稳定提取;扫描 PDF 暂不进行 OCR。标书、清单和知识库解析默认忽略图片,产品库中的产品图片及图库的文档抽图能力按业务需要单独保留。
2. 格式与解析方案¶
| 格式 | 解析方案 | 具体作用 | 图片策略 |
|---|---|---|---|
.doc |
Apache POI HWPF | 直接读取旧版 Word OLE 文件,提取段落、逻辑表格网格、横纵合并单元格和多行表头,无需先转换为 .docx。 |
标书、清单和知识库忽略图片;图库需要抽图时,通过 HWPF PicturesTable 导出内嵌图片。 |
.docx |
python-docx | 直接读取 OOXML Word 文件,提取段落、表格、合并单元格及基础文档结构。 | 标书、清单和知识库忽略图片;图库需要抽图时,从 DOCX 媒体关系中提取内嵌图片。 |
.pdf |
PyMuPDF | 直接提取文本型 PDF 的页面文字和文档内容,不经过 Word 中转;扫描型 PDF 暂不处理。 | 正文解析不理解图片;图库抽图时可提取 PDF 内嵌图片。 |
.xlsx |
openpyxl(产品库补充原生 OOXML) | 以 openpyxl 读取工作表、单元格、合并区域、公式缓存结果和隐藏行列;产品库当前补充读取原生 OOXML,以获得图片锚点等底层关系。 | 普通文档解析忽略图片;产品库导入时保留内嵌图片,并按工作表和行位置关联产品。 |
.xls |
Apache POI HSSF | 直接读取旧版 Excel OLE 工作簿,提取工作表、单元格、合并区域、公式缓存结果以及隐藏行列,无需转换为 .xlsx。 |
普通文档解析忽略图片;产品库导入时通过 HSSF 提取内嵌图片,并按锚点位置关联产品。 |
3. 业务范围¶
| 业务场景 | 文本与表格 | 图片处理 |
|---|---|---|
| 标书解析 | 按文件格式调用对应解析器,保留正文和表格结构。 | 跳过,不参与解析。 |
| 清单解析 | Word、PDF 或 Excel 按对应原生解析器提取结构化内容。 | 跳过,不参与解析。 |
| 知识库解析 | 提取可检索的正文和表格文本。 | 跳过,不进入知识库文本;后续如需要图像理解再单独扩展。 |
| 产品库导入 | 使用 Excel 原生结构识别产品字段和数据行。 | 保留 .xls、.xlsx 中明确的产品图片,并关联到对应产品行。 |
| 图库文档抽图 | 不承担标书正文解析。 | 支持从 .doc、.docx、.pdf 中提取内嵌图片,再进入图库图片理解流程。 |
4. 表格处理原则¶
- Word 中视觉上跨页的表格,在
.doc和.docx文件结构中通常仍是一张完整表格,解析时按完整逻辑表读取。 .doc表格重点处理逻辑网格、横向合并、纵向合并和多行表头,避免按视觉单元格简单拼接造成列错位。- Excel 解析保留合并单元格、隐藏行列和公式缓存结果;产品导入根据约定字段识别表头和数据行。
- 对表格数量、行数、列数和单元格总量设置安全上限;超过上限时直接结束解析,不对同一确定性错误重复重试。
5. 当前边界¶
- 扫描 PDF 暂不执行 OCR,因此纯图片 PDF 可能无法提取正文。
- 标书、清单和知识库中的图片暂不做语义理解,也不进入正文解析结果。
- 普通图片文件不作为文档解析输入;图库和产品库图片按照各自业务链路处理。
- LibreOffice 不再作为上述格式的公共解析依赖。