Files
lyxy-document/openspec/changes/archive/2026-03-08-unify-document-readers/specs/pdf-reader/spec.md
lanyuanxiaoyao 833018d451 feat: 统一文档解析器项目 - 迁移 lyxy-reader-office 和 lyxy-reader-html
## 功能特性

- 建立统一的项目结构,包含 core/、readers/、utils/、tests/ 模块
- 迁移 lyxy-reader-office 的所有解析器(docx、xlsx、pptx、pdf)
- 迁移 lyxy-reader-html 的所有解析器(html、url 下载)
- 统一 CLI 入口为 lyxy_document_reader.py
- 统一 Markdown 后处理逻辑
- 按文件类型组织 readers,每个解析器独立文件
- 依赖分组按文件类型细分(docx、xlsx、pptx、pdf、html、http)
- PDF OCR 解析器优先,无参数控制
- 使用 logging 模块替代简单 print
- 设计完整的单元测试结构
- 重写项目文档

## 新增目录/文件

- core/ - 核心模块(异常体系、Markdown 工具、解析调度器)
- readers/ - 格式阅读器(base.py + docx/xlsx/pptx/pdf/html)
- utils/ - 工具函数(文件类型检测)
- tests/ - 测试(conftest.py + test_core/ + test_readers/ + test_utils/)
- lyxy_document_reader.py - 统一 CLI 入口

## 依赖分组

- docx - DOCX 文档解析支持
- xlsx - XLSX 文档解析支持
- pptx - PPTX 文档解析支持
- pdf - PDF 文档解析支持(含 OCR)
- html - HTML/URL 解析支持
- http - HTTP/URL 下载支持
- office - Office 格式组合(docx/xlsx/pptx/pdf)
- web - Web 格式组合(html/http)
- full - 完整功能
- dev - 开发依赖
2026-03-08 13:46:37 +08:00

117 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED Requirements
### Requirement: PDF 文档解析
系统 SHALL 支持解析 PDF 格式文档按优先级尝试多个解析器OCR 优先。
#### Scenario: 按优先级尝试解析器
- **WHEN** 解析 PDF 文档
- **THEN** 系统按 docling OCR → unstructured OCR → docling → unstructured → markitdown → pypdf 的顺序尝试
#### Scenario: 成功解析
- **WHEN** 任一解析器成功
- **THEN** 系统返回解析结果
#### Scenario: 所有解析器失败
- **WHEN** 所有解析器均失败
- **THEN** 系统返回失败列表并退出非零状态码
### Requirement: 无 --high-res 参数
系统 SHALL NOT 提供 --high-res 参数来控制是否使用 OCROCR 解析器直接加入解析器链。
#### Scenario: 不接受 --high-res 参数
- **WHEN** 用户使用 --high-res 参数
- **THEN** 系统提示该参数不存在
### Requirement: docling OCR 解析器
系统 SHALL 支持使用 docling 库的 OCR 模式解析 PDF。
#### Scenario: docling OCR 解析成功
- **WHEN** docling 库可用且文档有效
- **THEN** 系统返回 Markdown 内容
#### Scenario: docling 库未安装
- **WHEN** docling 库未安装
- **THEN** 系统尝试下一个解析器
### Requirement: unstructured OCR 解析器
系统 SHALL 支持使用 unstructured 库的 hi_res 策略+PaddleOCR 解析 PDF。
#### Scenario: unstructured OCR 解析成功
- **WHEN** unstructured 和 unstructured-paddleocr 库可用且文档有效
- **THEN** 系统返回 Markdown 内容
#### Scenario: unstructured OCR 依赖未安装
- **WHEN** unstructured 或 unstructured-paddleocr 库未安装
- **THEN** 系统尝试下一个解析器
### Requirement: docling 解析器(非 OCR
系统 SHALL 支持使用 docling 库的非 OCR 模式解析 PDF。
#### Scenario: docling 解析成功
- **WHEN** docling 库可用且文档有效
- **THEN** 系统返回 Markdown 内容
#### Scenario: docling 库未安装
- **WHEN** docling 库未安装
- **THEN** 系统尝试下一个解析器
### Requirement: unstructured 解析器(非 OCR
系统 SHALL 支持使用 unstructured 库的 fast 策略解析 PDF。
#### Scenario: unstructured 解析成功
- **WHEN** unstructured 库可用且文档有效
- **THEN** 系统返回 Markdown 内容
#### Scenario: unstructured 库未安装
- **WHEN** unstructured 库未安装
- **THEN** 系统尝试下一个解析器
### Requirement: markitdown 解析器
系统 SHALL 支持使用 markitdown 库解析 PDF。
#### Scenario: markitdown 解析成功
- **WHEN** markitdown 库可用且文档有效
- **THEN** 系统返回 Markdown 内容
#### Scenario: markitdown 库未安装
- **WHEN** markitdown 库未安装
- **THEN** 系统尝试下一个解析器
### Requirement: pypdf 解析器
系统 SHALL 支持使用 pypdf 库解析 PDF。
#### Scenario: pypdf 解析成功
- **WHEN** pypdf 库可用且文档有效
- **THEN** 系统返回 Markdown 内容
#### Scenario: pypdf 库未安装
- **WHEN** pypdf 库未安装
- **THEN** 系统返回失败信息
### Requirement: 每个解析器独立文件
系统 SHALL 将每个解析器实现为独立的单文件模块。
#### Scenario: docling OCR 解析器在独立文件
- **WHEN** 使用 docling OCR 解析器
- **THEN** 从 readers/pdf/docling_ocr.py 导入
#### Scenario: unstructured OCR 解析器在独立文件
- **WHEN** 使用 unstructured OCR 解析器
- **THEN** 从 readers/pdf/unstructured_ocr.py 导入
#### Scenario: docling 解析器在独立文件
- **WHEN** 使用 docling 解析器
- **THEN** 从 readers/pdf/docling.py 导入
#### Scenario: unstructured 解析器在独立文件
- **WHEN** 使用 unstructured 解析器
- **THEN** 从 readers/pdf/unstructured.py 导入
#### Scenario: markitdown 解析器在独立文件
- **WHEN** 使用 markitdown 解析器
- **THEN** 从 readers/pdf/markitdown.py 导入
#### Scenario: pypdf 解析器在独立文件
- **WHEN** 使用 pypdf 解析器
- **THEN** 从 readers/pdf/pypdf.py 导入