Files
lyxy-document/README.md
lanyuanxiaoyao 25d748aa17 docs: 重构 README.md 和 SKILL.md,明确文档职责
- README.md 面向开发者:添加项目概述、核心概念说明、开发指南
- SKILL.md 面向 AI:强化 --advice 作为首选方案,明确三路径执行优先级
- 更新 specs:skill-documentation 和 uv-with-dependency-management
- README 添加 reportlab 测试依赖
2026-03-09 21:56:58 +08:00

219 lines
5.5 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.
# lyxy-document
统一文档解析工具 - 将 DOCX、XLSX、PPTX、PDF、HTML/URL 转换为 Markdown
## 项目概述
面向 AI Skill 的统一文档解析工具,支持多种文档格式解析为 Markdown提供全文输出、字数统计、标题提取、内容搜索等功能。
## 开发环境
- 使用 uv 运行脚本和测试,禁用主机 Python
- 依赖管理:使用 `uv run --with` 按需加载依赖
- 快速获取建议:使用 `-a/--advice` 参数查看执行命令
## 项目架构
```
scripts/
├── lyxy_document_reader.py # CLI 入口
├── config.py # 配置(含 DEPENDENCIES 依赖配置)
├── core/ # 核心模块
│ ├── parser.py # 解析调度
│ ├── advice_generator.py # --advice 执行建议生成器
│ ├── markdown.py # Markdown 工具
│ └── exceptions.py # 异常定义
├── readers/ # 格式阅读器
│ ├── base.py # Reader 基类
│ ├── docx/ # DOCX 解析器
│ ├── xlsx/ # XLSX 解析器
│ ├── pptx/ # PPTX 解析器
│ ├── pdf/ # PDF 解析器
│ └── html/ # HTML/URL 解析器
└── utils/ # 工具函数
├── file_detection.py # 文件检测
└── encoding_detection.py # 编码检测
tests/ # 测试套件
openspec/ # OpenSpec 规范文档
README.md # 本文档(开发者文档)
SKILL.md # AI Skill 文档
```
## 核心概念
### Reader 机制
每种文档格式对应一个 Reader 包包含多个解析实现。Reader 基类定义 `supports()``parse()` 方法,解析器按顺序尝试,第一个成功的结果返回。
### 依赖配置 (config.DEPENDENCIES)
按文件类型和平台组织依赖配置:
```python
DEPENDENCIES = {
"pdf": {
"default": {
"python": None,
"dependencies": ["docling", "unstructured[pdf]", ...]
},
"Darwin-x86_64": {
"python": "3.12",
"dependencies": ["docling==2.40.0", ...]
}
},
...
}
```
### --advice 生成机制
`--advice` 参数根据文件扩展名识别类型,检测当前平台,从 `config.DEPENDENCIES` 读取对应配置,生成 `uv run --with``pip install` 命令。
## 开发指南
### 如何添加新的 Reader
1.`scripts/readers/` 下创建新目录
2. 继承 `BaseReader` 实现 `supports()``parse()`
3.`scripts/readers/__init__.py` 中注册
4.`config.DEPENDENCIES` 中添加依赖配置
### 如何测试
项目包含完整的测试套件,覆盖 CLI 和所有 Reader 实现。根据测试类型使用对应的 `uv run --with` 命令。
#### 运行所有测试
```bash
uv run \
--with pytest \
--with pytest-cov \
--with chardet \
pytest
```
#### 测试 DOCX reader
```bash
uv run \
--with pytest \
--with docling \
--with "unstructured[docx]" \
--with "markitdown[docx]" \
--with pypandoc-binary \
--with python-docx \
--with markdownify \
--with chardet \
pytest tests/test_readers/test_docx/
```
#### 测试 XLSX reader
```bash
uv run \
--with pytest \
--with docling \
--with "unstructured[xlsx]" \
--with "markitdown[xlsx]" \
--with pandas \
--with tabulate \
--with chardet \
pytest tests/test_readers/test_xlsx/
```
#### 测试 PPTX reader
```bash
uv run \
--with pytest \
--with docling \
--with "unstructured[pptx]" \
--with "markitdown[pptx]" \
--with python-pptx \
--with markdownify \
--with chardet \
pytest tests/test_readers/test_pptx/
```
#### 测试 PDF reader
```bash
# 默认命令macOS ARM、Linux、Windows
uv run \
--with pytest \
--with docling \
--with "unstructured[pdf]" \
--with "markitdown[pdf]" \
--with pypdf \
--with markdownify \
--with chardet \
--with reportlab \
pytest tests/test_readers/test_pdf/
# macOS x86_64 (Intel) 特殊命令
uv run \
--python 3.12 \
--with pytest \
--with "docling==2.40.0" \
--with "docling-parse==4.0.0" \
--with "numpy<2" \
--with "markitdown[pdf]" \
--with pypdf \
--with markdownify \
--with chardet \
--with reportlab \
pytest tests/test_readers/test_pdf/
```
#### 测试 HTML reader
```bash
uv run \
--with pytest \
--with trafilatura \
--with domscribe \
--with markitdown \
--with html2text \
--with beautifulsoup4 \
--with httpx \
--with chardet \
pytest tests/test_readers/test_html/
```
#### 运行特定测试文件或方法
```bash
# 运行特定测试文件
uv run \
--with pytest \
--with chardet \
pytest tests/test_cli/test_main.py
# 运行特定测试类或方法
uv run \
--with pytest \
--with docling \
--with chardet \
pytest tests/test_cli/test_main.py::TestCLIDefaultOutput::test_default_output_docx
```
#### 查看测试覆盖率
```bash
uv run \
--with pytest \
--with pytest-cov \
--with chardet \
pytest --cov=scripts --cov-report=term-missing
```
### 代码规范
- 语言:仅中文(交流、注释、文档、代码)
- 模块文件150-300 行
- 错误处理:自定义异常 + 清晰信息 + 位置上下文
- Git 提交:`类型: 简短描述`feat/fix/refactor/docs/style/test/chore
## 文档说明
- **README.md**(本文档):面向项目开发者
- **SKILL.md**:面向 AI 使用的 Skill 文档
- **openspec/**OpenSpec 规范文档
## 许可证
MIT License