refactor: 统一 HTML Reader 的 parse 签名,使用文件路径参数

将所有 HTML Parser 的函数签名从接收 HTML 字符串改为接收文件路径,
与其他 Reader(PDF、DOCX 等)保持一致。

主要变更:
- 修改 PARSERS 列表,移除 lambda 表达式,直接传递函数引用
- 在 HtmlReader.parse() 中统一管理临时文件(UTF-8 编码)
- 每个 Parser 使用独立的临时文件副本,用完即清理
- 移除 download_and_parse() 方法,逻辑合并到 parse() 中
- 更新相关测试,改为直接传递文件路径

受影响的 Parser:
- trafilatura.parse(html_content) -> parse(file_path)
- domscribe.parse(html_content) -> parse(file_path)
- markitdown.parse(html_content, temp_file_path) -> parse(file_path)
- html2text.parse(html_content) -> parse(file_path)
This commit is contained in:
2026-03-09 00:05:23 +08:00
parent 09904aefdc
commit 2b81dd49fe
10 changed files with 132 additions and 146 deletions

View File

@@ -28,7 +28,7 @@ HTML/URL 文档解析能力,支持多种解析方法。
#### Scenario: HTML reader 解析 URL
- **WHEN** 调用 HtmlReader.parse(input_path) 且 input_path 为 URL
- **THEN** 系统调用内部的 download_and_parse() 方法
- **THEN** 系统在内部处理 URL 下载和解析
#### Scenario: 按优先级尝试下载器
- **WHEN** 输入为 URL
@@ -215,19 +215,41 @@ HTML/URL 文档解析能力,支持多种解析方法。
- **THEN** 系统返回错误信息包含编码检测失败原因
### Requirement: HTML reader 统一处理 URL 和文件
系统 SHALL 在 HTML reader 的 parse() 方法中统一处理 URL 和本地文件。
系统 SHALL 在 HTML reader 的 `parse()` 方法中统一处理 URL 和本地文件,无需单独的 `download_and_parse()` 方法
#### Scenario: parse() 判断输入类型
- **WHEN** 调用 HtmlReader.parse(file_path)
- **WHEN** 调用 `HtmlReader.parse(file_path)`
- **THEN** 系统判断 file_path 是 URL 还是本地文件
#### Scenario: URL 调用 download_and_parse
#### Scenario: URL 下载后解析
- **WHEN** file_path 为 URL
- **THEN** 系统调用 self.download_and_parse(file_path)
- **THEN** 系统下载 HTML 内容
- **AND** 清理 HTML 内容
- **AND** 创建临时文件UTF-8 编码)
- **AND** 传递临时文件路径给各 parser
#### Scenario: 本地文件读取并解析
- **WHEN** file_path 为本地文件
- **THEN** 系统使用编码检测读取文件,然后解析 HTML 内容
- **THEN** 系统使用编码检测读取文件
- **AND** 清理 HTML 内容
- **AND** 创建临时文件UTF-8 编码)或使用原文件路径
- **AND** 传递文件路径给各 parser
### Requirement: 每个 HTML Parser 接收文件路径
每个 HTML parser SHALL 接收文件路径作为输入,而非 HTML 字符串。
#### Scenario: Parser 接收 file_path
- **WHEN** `HtmlReader.parse()` 调用 parser
- **THEN** parser 接收 `file_path: str` 参数
#### Scenario: Parser 内部读取文件
- **WHEN** parser 解析 HTML
- **THEN** parser 内部使用 UTF-8 编码读取文件内容
#### Scenario: Parser 独立临时文件
- **WHEN** 多个 parser 依次尝试
- **THEN** 每个 parser 使用独立的临时文件副本
- **AND** 用完后立即清理临时文件
### Requirement: HTML reader supports() 支持 URL
系统 SHALL 在 HTML reader 的 supports() 方法中同时支持 URL 和 HTML 文件扩展名。