# 文档页数统计Skill 设计 ## 1. Skill 定位 `文档页数统计Skill` 负责为注册申报资料文件生成页数统计结果。页数是题面明确要求的关键指标,因此本 Skill 必须把页数、统计方法和可信度分开记录。 本 Skill 不负责文档正文抽取,不负责 OCR,不负责合规判断。 英文实现标识建议使用 `DocumentPageCountSkill`,用于 Python 类名和 Tool Registry 注册处理器。 ## 2. 输入 ```python @dataclass class DocumentPageCountInput: document_id: int file_path: Path file_type: str options: dict = field(default_factory=dict) ``` ## 3. 输出 ```python @dataclass class PageCountResult: document_id: int page_count: int | None method: str confidence: str status: str message: str = "" ``` ## 4. 页数统计策略 | 文件类型 | 策略 | 可信度 | |---|---|---| | `pdf` | 使用 `pypdf` 或 `PyMuPDF` 读取页数 | `exact` | | `docx` | 优先读取 Word 统计信息,必要时转换 PDF 后统计 | `exact` | | `doc` | 尝试转换后统计,失败则待复核 | `manual_review_required` | | `txt` | 页数不适用 | `not_applicable` | | `md` | 页数不适用 | `not_applicable` | DOCX 是 V1 验收重点,不能用字数、段落数或估算分页代替精确页数。 ## 5. 核心方法 ### 5.1 `run(input) -> PageCountResult` 根据文件类型路由到具体统计方法。 ### 5.2 `count_pdf_pages(path) -> PageCountResult` 推荐使用 `pypdf` 或 `PyMuPDF`。 失败处理: 1. 文件损坏:`failed` 2. 加密 PDF:`manual_review_required` 3. 无法读取:`failed` ### 5.3 `count_docx_pages(path) -> PageCountResult` DOCX 精确页数建议采用两级策略: 1. 读取文档内部统计属性中的页数。 2. 若统计属性不可用,使用 LibreOffice headless 转 PDF,再统计 PDF 页数。 如果两级策略均失败,输出 `manual_review_required`,并在页面突出显示。 ### 5.4 `count_doc_pages(path) -> PageCountResult` DOC 文件首版策略: 1. 尝试用兼容转换工具转 PDF。 2. 转换成功后统计 PDF 页数。 3. 转换失败则标记待人工复核。 ### 5.5 `count_text_pages(path) -> PageCountResult` TXT/MD 首版不做页数强制验收。 返回: 1. `page_count = None` 2. `method = "not_applicable"` 3. `confidence = "not_applicable"` ## 6. 技术实现 建议依赖: 1. `pypdf` 2. `PyMuPDF` 3. `python-docx` 4. LibreOffice headless,可作为增强能力 如果 V1 Docker 环境暂不内置 LibreOffice,应在配置中显式标注 `DOCX_PAGE_COUNT_STRATEGY`,并保证演示样本能通过已实现策略得到精确页数。 ## 7. 状态设计 | 状态 | 含义 | |---|---| | `success` | 页数统计成功 | | `not_applicable` | 文本类文件不适用 | | `manual_review_required` | 需要人工复核 | | `failed` | 统计失败 | ## 8. 落库字段 建议写入 `RegistrationDocument`: 1. `page_count` 2. `page_count_method` 3. `page_count_confidence` 4. `page_count_status` 5. `processing_message` ## 9. 测试要点 1. PDF 返回精确页数。 2. DOCX 返回精确页数。 3. DOC 无法统计时标记待人工复核。 4. TXT/MD 返回不适用。 5. 损坏文件返回失败状态。