1
0
Files
Skill/openspec/specs/html-document-parsing/spec.md
lanyuanxiaoyao 6b4fcf2647 创建 lyxy-reader-html skill
- 新增 skill: lyxy-reader-html,用于解析 HTML 文件和 URL 网页内容
- 支持 URL 下载(pyppeteer → selenium → httpx → urllib 优先级回退)
- 支持 HTML 解析(trafilatura → domscribe → MarkItDown → html2text 优先级回退)
- 支持查询功能:全文提取、字数统计、行数统计、标题提取、章节提取、正则搜索
- 新增 spec: html-document-parsing
- 归档 change: create-lyxy-reader-html-skill
2026-03-08 02:02:03 +08:00

5.9 KiB
Raw Blame History

Requirements

Requirement: 优先使用 lyxy-reader-html 解析 HTML 内容

大模型在遇到 URL、.html 或 .htm 文件时SHALL 优先激活并使用 lyxy-reader-html skill 来读取内容。

Scenario: 用户请求读取 URL

  • WHEN 用户提供以 http:// 或 https:// 开头的 URL
  • THEN 大模型 SHALL 激活 lyxy-reader-html skill
  • AND 使用 skill 目录下的 scripts/parser.py 执行解析

Scenario: 用户请求读取 HTML 文件

  • WHEN 用户提供的文件路径以 .html 或 .htm 结尾
  • THEN 大模型 SHALL 激活 lyxy-reader-html skill
  • AND 使用 skill 目录下的 scripts/parser.py 执行解析

Requirement: 必须通过 lyxy-runner-python 执行脚本

当环境中存在 lyxy-runner-python skill 时,大模型 SHALL 必须使用该 skill 来运行 parser.py 脚本。

Scenario: lyxy-runner-python 可用

  • WHEN 大模型环境中存在 lyxy-runner-python skill
  • THEN 大模型 SHALL 通过 lyxy-runner-python skill 执行 parser.py
  • AND 利用 lyxy-runner-python 的自动依赖管理功能uv安装所需的 Python 包

Scenario: lyxy-runner-python 不可用

  • WHEN 大模型环境中不存在 lyxy-runner-python skill
  • THEN 大模型 SHALL 降级到直接使用 Python 执行 parser.py
  • AND 提示用户当前使用直接执行模式
  • AND 禁止自动执行 pip install 安装依赖

Requirement: 引导阅读 README 获取详细用法

大模型在需要了解 parser.py 的详细使用方式时SHALL 阅读 scripts/README.md 文件。

Scenario: 首次使用 skill 执行解析

  • WHEN 大模型首次使用 lyxy-reader-html skill 或不确定具体参数用法
  • THEN 大模型 SHALL 阅读 scripts/README.md 获取命令行参数、依赖安装和使用示例等详细信息

Scenario: 遇到特殊参数需求

  • WHEN 用户请求使用特殊功能(如章节提取、正则搜索等)
  • THEN 大模型 SHALL 参考 scripts/README.md 中的对应参数说明

Requirement: 支持 URL 和 HTML 文件两种输入源

系统 SHALL 支持从 URL 下载 HTML 内容或直接读取本地 HTML 文件两种输入方式。

Scenario: 输入为 URL

  • WHEN 输入以 http:// 或 https:// 开头
  • THEN 系统 SHALL 识别为 URL 模式
  • AND 尝试下载 URL 对应的 HTML 内容

Scenario: 输入为本地 HTML 文件

  • WHEN 输入是存在的本地文件且扩展名为 .html 或 .htm
  • THEN 系统 SHALL 识别为 HTML 文件模式
  • AND 直接读取文件内容进行解析

Scenario: 输入无法识别

  • WHEN 输入既不是 URL 也不是有效的 HTML 文件
  • THEN 系统 SHALL 输出错误信息
  • AND 以退出码 1 退出

Requirement: URL 下载器按优先级降级

系统 SHALL 按 pyppeteer → selenium → httpx → urllib 的优先级尝试下载 URL 内容。

Scenario: 下载器按优先级降级

  • WHEN 优先级最高的下载器不可用或下载失败
  • THEN 系统自动尝试下一优先级的下载器
  • AND 记录每个下载器的失败原因

Scenario: 所有下载器失败

  • WHEN 所有下载策略均失败
  • THEN 系统返回详细的失败信息
  • AND 列出每种下载策略的失败原因
  • AND 以退出码 1 退出

Requirement: HTML 解析器按优先级降级

系统 SHALL 按 trafilatura → domscribe → MarkItDown → html2text 的优先级尝试解析 HTML 内容。

Scenario: 解析器按优先级降级

  • WHEN 优先级最高的解析器不可用或解析失败
  • THEN 系统自动尝试下一优先级的解析器
  • AND 记录每个解析器的失败原因

Scenario: 所有解析器失败

  • WHEN 所有解析策略均失败
  • THEN 系统返回详细的失败信息
  • AND 列出每种解析策略的失败原因
  • AND 以退出码 1 退出

Requirement: HTML 内容预处理清理

系统 SHALL 在解析前对 HTML 内容进行预处理清理,移除噪声元素。

Scenario: 清理 script 和 style 标签

  • WHEN HTML 内容包含 <script>、<style>、<link>、<svg> 标签
  • THEN 系统 SHALL 移除这些标签及其内容

Scenario: 清理 URL 属性

  • WHEN HTML 标签包含 href、src、srcset、action、data-*src 等 URL 属性
  • THEN 系统 SHALL 移除这些属性

Scenario: 清理 style 属性

  • WHEN HTML 标签包含 style 属性
  • THEN 系统 SHALL 移除 style 属性

Requirement: 支持统一的查询功能

系统 SHALL 提供统一的查询接口,包括全文提取、元数据查询、标题提取、章节提取和正则搜索。

Scenario: 获取文档字数

  • WHEN 用户请求获取文档的字数
  • THEN 系统使用 -c 参数返回文档的总字符数

Scenario: 获取文档行数

  • WHEN 用户请求获取文档的行数
  • THEN 系统使用 -l 参数返回文档的总行数

Scenario: 提取所有标题

  • WHEN 用户请求提取文档的标题结构
  • THEN 系统使用 -t 参数返回所有 1-6 级标题

Scenario: 提取指定章节内容

  • WHEN 用户请求提取特定标题名称的章节内容
  • THEN 系统使用 -tc 参数返回该章节的完整内容
  • AND 包含完整的上级标题链和所有下级内容

Scenario: 正则表达式搜索

  • WHEN 用户请求在文档中搜索关键词或模式
  • THEN 系统使用 -s 参数返回所有匹配结果及上下文
  • AND 默认包含前后各 2 行非空行上下文
  • AND 支持 -n 参数自定义上下文行数

Requirement: Markdown 后处理

系统 SHALL 对解析后的 Markdown 内容进行后处理,提升可读性。

Scenario: 移除图片标记

  • WHEN 解析结果包含 Markdown 图片语法 ![alt](url)
  • THEN 系统 SHALL 移除这些图片标记

Scenario: 规范化空行

  • WHEN 解析结果包含连续 3 个或更多空行
  • THEN 系统 SHALL 将其合并为单个空行