# 专利通俗解读工具（`tools/patent_reader/`）

阅读模式专用脚本，与交底书主流程工具（`tools/shared/`、`tools/crawl/` 等）分离。

## 目录结构

```
tools/patent_reader/
├── shared/     # 共享配置与路径
├── extract/    # PDF / 全文 / 附图取证
├── analyze/    # 权要树、线索包、校验与 lint
└── vault/      # Obsidian 入库、Canvas、关联与库环境
```

| 子目录 | 文件 | 作用 |
|--------|------|------|
| `shared/` | `common.py` | 领域路由、IPC 提示、路径与环境变量 |
| `extract/` | `fetch_patent_pdf.py` | **按公开号下载全文 PDF**（源表 `references/patent_pdf_sources.yaml`；状态含自动判别的 `patent_type`） |
| | `fetch_design_views.py` | **外观设计视图取证**（国知局会话 + 详情页 `/imgs` 序号探测；无 PDF CDN 时用） |
| | `extract_patent_text.py` | 全文/PDF 取证 |
| | `figure_extract.py` | caption+bbox 裁切 + 质量门 |
| | `extract_patent_figures.py` | PDF 附图 CLI → manifest |
| `analyze/` | `build_context_anchor.py` | 技术落地线索包 |
| | `build_claim_mermaid.py` | 权利要求 mermaid |
| | `validate_claim_tree.py` | 权项树校验/规范化 |
| | `validate_public_clues.py` | 附录 B 线索校验 + 置信度筛选 |
| | `lint_patent_note.py` | 笔记结构校验 |
| `vault/` | `obsidian.py` | Frontmatter、Canvas、库 bootstrap、Mermaid |
| | `schema_vault.py` | Structure/Appearance Schema 写入笔记/Canvas |
| | `clue_vault.py` | `clues/` 落地、附录/旁注/Canvas |
| | `desc_paragraphs.py` | 说明书 `[000N]` 解析与悬停 wikilink |
| | `note_cites.py` | 笔记引用增强 |
| | `patent_link.py` | 库内专利关联规则 |
| | `write_patent_obsidian_note.py` | 入库主入口 |
| | `build_patent_canvas.py` | JSON Canvas 图谱 |
| | `link_patent_notes.py` | 交付后库内关联与全局 Canvas |
| | `materialize_public_clues.py` | 对已有解读补跑线索落地 |
| | `check_obsidian_env.py` | 探测/持久化库路径 |
| | `setup_obsidian_vault.py` | 库初始化（开发/排障） |
| 根 | `requirements.txt` | 可选依赖（`pymupdf`） |

库内模板：`assets/obsidian/`（CSS、`*.base.yaml` 源稿、索引页；拷库时写成 `.base`）。

流程见 **`prompts/reader/patent_plain_reader.md`**。

## 快速开始

```bash
pip install -r tools/patent_reader/requirements.txt

# 先探测库路径（强烈推荐已装 Obsidian 并开库）
python tools/patent_reader/vault/check_obsidian_env.py --auto-accept

# 仅公开号：先下载 PDF（Google Patents 页 → CDN；见 patent_pdf_sources.yaml）
python tools/patent_reader/extract/fetch_patent_pdf.py \
  --pub CN119961390A -o tmp/patent_reader/demo

python tools/patent_reader/extract/extract_patent_text.py \
  -i tmp/patent_reader/demo/source/CN119961390A.pdf \
  -o tmp/patent_reader/demo --pub-number CN119961390A

# 外观设计（CN…S）：常无 PDF CDN → 用国知局视图取证
pip install -r tools/crawl/requirements-cnipa.txt
python tools/shared/browser.py --probe
# 无 Chrome/Edge 时才：python -m playwright install chromium
python tools/patent_reader/extract/fetch_design_views.py \
  --pub CN309939145S -o tmp/patent_reader/demo_design
# → figures/images/view_001.jpg … + figures/manifest.json + source/*_design_brief.json
```

入库用 `vault/write_patent_obsidian_note.py`（内含 bootstrap）；勿再单独要求用户跑 `setup_obsidian_vault.py`。

## 环境变量

| 变量 | 说明 |
|------|------|
| `PATENT_READER_OBSIDIAN_VAULT` | Obsidian 库根（兼容 `PATENT_DISCLOSURE_OBSIDIAN_VAULT`）；也可用 `check_obsidian_env.py --set` 持久化到 `~/.patent-disclosure-skill/obsidian_vault.txt` |
| `PATENT_READER_PAPERS_DIR` | 库内目录，默认 `Research/Patents` |
| `PATENT_READER_OUTPUT_DIR` | 未配置库时输出目录 |
| `PATENT_READER_GLOSSARY_DIR` | 术语目录，默认 `Research/术语` |

交付后可选社区插件引导：`prompts/reader/obsidian_plugin_guide.md`。  
关系图配色与插件说明：`docs/obsidian-setup-guide.md`（原生 Groups，无需插件）。
