Files
lyxy-document/README.md
lanyuanxiaoyao e53e64d386 refactor: 优化 chardet 依赖配置,仅保留在 HTML reader 中
- 从 pdf/docx/xlsx/pptx reader 的依赖列表中移除 chardet
- 保留 chardet 在 html reader 的依赖配置中(唯一实际使用方)
- 更新 README.md 文档,移除不必要的 chardet 依赖说明
- 简化测试命令,移除非 HTML reader 测试中的 chardet
2026-03-10 12:44:35 +08:00

241 lines
6.2 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` 命令。
## 快速开始
### 验证环境
首先验证项目可以正常运行:
```bash
# 测试 --advice 功能(无需额外依赖)
uv run python scripts/lyxy_document_reader.py test.pdf --advice
```
### 运行基础测试
```bash
# 运行 CLI 测试(验证项目基本功能)
uv run \
--with pytest \
pytest tests/test_cli/test_main.py::TestCLIAdviceOption -v
```
## 开发指南
### 测试前置依赖说明
由于 `HtmlReader` 模块在导入时会加载 `cleaner.py`,但 `cleaner.py` 中的第三方库已改为动态导入,因此无需额外依赖。
`beautifulsoup4``chardet` 仅在实际使用 HTML 功能时才需要,模块导入时不依赖。
### 如何添加新的 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 \
pytest
```
#### 测试 DOCX reader
```bash
uv run \
--with pytest \
--with docling \
--with "unstructured[docx]" \
--with "markitdown[docx]" \
--with pypandoc-binary \
--with python-docx \
--with markdownify \
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 \
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 \
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 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 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
# 运行特定测试文件CLI 测试无需额外依赖)
uv run \
--with pytest \
pytest tests/test_cli/test_main.py
# 仅运行 --advice 相关测试(不需要额外依赖)
uv run \
--with pytest \
pytest tests/test_cli/test_main.py::TestCLIAdviceOption
# 运行特定测试类或方法
uv run \
--with pytest \
--with docling \
pytest tests/test_cli/test_main.py::TestCLIDefaultOutput::test_default_output_docx
```
#### 查看测试覆盖率
```bash
uv run \
--with pytest \
--with pytest-cov \
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