lllin000_PaperForge/command/pf-ocr.md

143 lines
3.9 KiB
Markdown
Raw Normal View History

# /pf-ocr
## Purpose
处理正式笔记 frontmatter 中 `do_ocr: true` 的 PDF OCR 队列。
`paperforge ocr` 会自动读取 `paperforge.json` 定位 ocr 目录和 worker 脚本,运行 OCR 并自动诊断结果。
## CLI Equivalent
```bash
paperforge ocr
```
如需使用 Python 直接调用(备选方式):
```bash
python -m paperforge ocr --vault .
```
## Prerequisites
- [ ] formal note frontmatter 中 `do_ocr: true` 已设置
- [ ] PDF 附件存在(`has_pdf: true`
- [ ] PaddleOCR API Key 已配置(`.env` 中 `PADDLEOCR_API_TOKEN`
- [ ] 网络连接正常(可访问 PaddleOCR 服务)
- [ ] `paperforge.json` 配置正确(路径解析无误)
## Arguments
| 参数 | 必需 | 说明 |
|------|------|------|
| `--diagnose` | 否 | 仅诊断配置,不上传 PDF |
| `--key <KEY>` | 否 | 仅处理指定 Zotero key 的文献 |
| `--vault <PATH>` | 否 | 指定 Vault 根目录(默认当前目录) |
| `--live` | 否 | 与 `--diagnose` 联用,执行实时 PDF 测试 |
### 诊断模式
验证 OCR 配置 before queueing jobs
```bash
paperforge ocr --diagnose
```
执行完整诊断(含实时 PDF 测试):
```bash
paperforge ocr --diagnose --live
```
### 诊断等级
| 等级 | 检查项 | 失败含义 |
|------|--------|---------|
| L1 | API token 存在性 | `PADDLEOCR_API_TOKEN` 缺失或为空 |
| L2 | URL 可达性 | 无法连接 PaddleOCR 服务 |
| L3 | API 格式验证 | 服务可达但响应格式异常 |
| L4 | 实时 PDF 往返 | 完整提交和结果获取失败 |
> Exit code `0` = 所有检查通过。Exit code `1` = 至少一项检查失败。
## Example
```bash
# 处理所有标记 do_ocr: true 的文献
paperforge ocr
# 仅处理指定文献
paperforge ocr --key ABCDEFG
# 诊断模式(不实际运行)
paperforge ocr --diagnose
# 完整诊断(含实时测试)
paperforge ocr --diagnose --live
# 指定 Vault 目录
paperforge ocr --vault /path/to/vault
```
## Output
OCR 完成后,每个文献生成以下文件:
```
<system_dir>/PaperForge/ocr/<key>/
├── fulltext.md # 提取的全文(含 `<!-- page N -->` 分页标记)
├── images/ # 自动切割的图表图片
├── meta.json # OCR 元数据(含 ocr_status
└── figure-map.json # 图表索引(自动生成)
```
`meta.json` 中的 `ocr_status` 字段:
- `pending` — 等待处理
- `processing` — 正在处理
- `done` — 完成
- `failed` — 失败
## Error Handling
### API Token 缺失L1 失败)
- **表现**`PADDLEOCR_API_TOKEN` 未设置或为空
- **解决**:在 `.env` 文件中添加 `PADDLEOCR_API_TOKEN=your_token_here`
### 服务不可达L2 失败)
- **表现**:无法连接 PaddleOCR 服务
- **解决**:检查网络连接,确认服务 URL 配置正确
### PDF 上传失败L4 失败)
- **表现**PDF 提交后未返回结果
- **解决**:检查 PDF 文件是否损坏,确认文件大小未超过限制
### OCR 状态卡住
- **表现**`ocr_status` 长期显示 `processing`
- **解决**:检查 `<system_dir>/PaperForge/ocr/<key>/meta.json` 中的错误信息,重新设置 `do_ocr: true` 后再次运行
## Platform Notes
### OpenCode
> `/pf-ocr` 是 **CLI 命令**Agent 层不直接提供 `/pf-ocr` 聊天命令。
>
> 用户需要:
> 1. 在 Obsidian 中将正式笔记的 `do_ocr` 设为 `true`
> 2. 在终端运行 `paperforge ocr`
> 3. 或在 Agent 对话中要求 Agent 执行上述步骤
### Codex
> **Future**:计划支持。预计通过 API 调用实现类似功能。
### Claude Code
> **Future**:计划支持。预计通过工具调用实现类似功能。
## See Also
- [pf-sync](pf-sync.md) — 文献同步(生成正式笔记)
- [pf-deep](pf-deep.md) — 深度精读(依赖 OCR 结果)
- [AGENTS.md](../AGENTS.md) — 完整使用指南、架构说明、常见问题
- [docs/COMMANDS.md](../docs/COMMANDS.md) — 命令总览与矩阵