- docling 转换器通过 PdfPipelineOptions 显式设置 do_ocr=False, 混合 PDF 的图片页不再产出 OCR 文字;不提供重新开启 OCR 的参数。 - 无文本层 PDF 的错误文案改为"扫描版或图片型 PDF 不支持", 上传阶段整批拒绝,保留混合 PDF 的可处理判定。 - 新增 test_layout_converter_disables_ocr 守护开关状态, 同步设计文档与 disable-ocr 实施计划/设计说明。
70 lines
3.5 KiB
Markdown
70 lines
3.5 KiB
Markdown
# 屏蔽数据处理中的 OCR 能力设计
|
||
|
||
日期:2026-08-18
|
||
|
||
## 1. 目标
|
||
|
||
屏蔽数据处理运行时的 OCR 能力,同时保留 Docling、`layout_hybrid` 版面分析、文本型 PDF 解析和现有前端切分选项。版面分析继续使用 Docling 的结构识别模型,但 PDF pipeline 必须显式设置 `do_ocr=False`,不再从图片或扫描页面识别文字。
|
||
|
||
## 2. 行为边界
|
||
|
||
- `layout_hybrid`、`semantic`、`fixed` 三种切分方式保持不变。
|
||
- `layout_hybrid` 继续通过 Docling 识别文本层 PDF 的版面、阅读顺序、表格和列表结构。
|
||
- OCR 是独立阶段,只在 Docling PDF pipeline 中关闭;不删除 Docling 版面/表格分析模型。
|
||
- 整份 PDF 没有可提取文本时继续拒绝,并提示扫描版或图片型 PDF 不支持。
|
||
- 混合 PDF 继续接收;有文本页正常处理,无文本图片页不产生文字,也不触发 OCR。
|
||
- TXT、Markdown、结构化文件、DOCX、XLSX、PPTX 和文本型 PDF 的其他流程不变。
|
||
- 不新增 OCR 配置项,不提供任何重新开启 OCR 的请求参数或环境开关。
|
||
|
||
## 3. 数据流
|
||
|
||
上传阶段仍由 `pypdf` 提取 PDF 文本。整份 PDF 没有文本层时在上传阶段失败;混合 PDF 保留空文本页。
|
||
|
||
预览阶段的 `layout_hybrid` 仍读取原始文件并调用 `DocumentConverter`,但转换器使用 PDF 专用配置:
|
||
|
||
```python
|
||
pipeline_options = PdfPipelineOptions()
|
||
pipeline_options.do_ocr = False
|
||
DocumentConverter(
|
||
format_options={
|
||
InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options),
|
||
}
|
||
)
|
||
```
|
||
|
||
这样 Docling 仍可对已有文本层执行版面分析,图片内容不会被 OCR 成文字。`semantic` 继续使用 LlamaIndex/HuggingFace embedding 模型;该模型与 OCR 无关。
|
||
|
||
## 4. 代码改动
|
||
|
||
### 4.1 PDF 版面转换
|
||
|
||
修改 `backend/app/modules/data_process/document_chunking.py` 的 `_document_converter()`:
|
||
|
||
- 导入 `InputFormat`、`PdfPipelineOptions` 和 `PdfFormatOption`;
|
||
- 创建 `PdfPipelineOptions` 后将 `do_ocr` 固定为 `False`;
|
||
- 只为 `InputFormat.PDF` 注册该配置;
|
||
- 保留现有 `HybridChunker`、版面序列化、来源页码和 bbox 映射。
|
||
|
||
### 4.2 扫描 PDF 错误与文档
|
||
|
||
将无文本 PDF 的错误从“需要 OCR”改为“扫描版或图片型 PDF 不支持”,避免向用户暗示系统可以提供 OCR。同步更新数据处理设计文档;不删除测试中与 DPO 字段验证无关的历史文本样例。
|
||
|
||
### 4.3 依赖与界面
|
||
|
||
不删除 `docling`、`docling_core`、`layout_hybrid`、前端版面切分选项或相关配置。仅增加 OCR 关闭回归测试,不修改切分类型、默认值和前端交互。
|
||
|
||
## 5. 测试设计
|
||
|
||
- 使用假的 Docling 模块测试 `_document_converter()` 传入的 PDF pipeline options 最终为 `do_ocr=False`,不要求测试环境安装 Docling 才能验证配置。
|
||
- 保留并运行版面投影、来源页码、短块合并和已有文本 PDF 测试,确认版面分析代码未被删除。
|
||
- 更新纯扫描 PDF 错误断言。
|
||
- 运行受影响的后端 pytest、Ruff 和前端数据处理回归;前端切分方式回归应继续要求 `layout_hybrid`、`semantic`、`fixed` 三种配置。
|
||
- 静态检查确认没有新增 OCR 开关、OCR 调用或 OCR 引擎依赖;`do_ocr=False` 是唯一运行时设置。
|
||
|
||
## 6. 非目标
|
||
|
||
- 不移除版面结构混合切分。
|
||
- 不移除 Docling 或其版面/表格分析模型。
|
||
- 不把 `layout_hybrid` 改为语义或固定切分。
|
||
- 不删除 PDF 支持,不改变混合 PDF 的接收策略。
|