3.3 KiB
3.3 KiB
name, description
| name | description |
|---|---|
| import | 参考书/旧稿 txt 导入解析——回目正则静态分章后落库(作品行+章行+正文 block+参考书档案),对账表即审查面。B1 参考书导入与 C8 用户旧稿复用同一通道;LLM 不参与,纯确定性工具。 |
import —— 导入解析(静态分章入库)
对应 muse API 面:导入解析旅程(产品-03 §3.7)。落库走 psycopg 直连(凭据同 db skill),写入约定见 db/表映射.md。
用法
# 预演:只解析打印对账,不落库
.venv/bin/python .claude/skills/import/scripts/import_novel.py --dry-run "../小说清单/机动风暴_骷髅精灵.txt"
# 正式导入(已存在同名作品则拒绝,--force 软删旧行重导)
.venv/bin/python .claude/skills/import/scripts/import_novel.py "../小说清单/超神机械师_齐佩甲.txt"
.venv/bin/python .claude/skills/import/scripts/import_novel.py --force "../小说清单/机动风暴_骷髅精灵.txt"
分章规则(按覆盖的真实格式)
- 恒启用:
第X章 标题(中文/阿拉伯数字,含「两/零/〇」);第X卷 第Y章 标题与无空格变体(取章开章,卷号入章行快照);纯卷行(有卷无章)不开章只计数。 - 自适应启用(书内命中 ≥50 次才生效,防误切):裸阿拉伯
001 标题式;裸中文数字一百零二 标题式。 - 修复规则:同题重现一律不开新章(盗版重贴水印,丢标题行、正文归当前章);尾部章号大幅回落(<前文峰值一半且位于文件末 5%)→ 该处起截断丢弃;全文过
html.unescape解实体;章号解析失败(如「一八五十一」错写)→ 继承前章号+1 并计数。
落库(一书一事务)
| 表 | 写入 |
|---|---|
| muse_content_work | 一行:title/genre='科幻'/status='completed'/owner_user_id=1/字数章数/import_status='imported'/parse_status='pending' |
| muse_content_chapter | 一章一行:order_no=顺序号、title=章题(≤200 字)、outline_snapshot 存 {卷号,解析章号} |
| muse_content_block | 一章一 block:order_no=1、block_type='scene'、content_text=正文、word_count |
| muse_knowledge_base | 幂等 ensure 两行:『参考书私有库』(kb_type='user') 与『公共范式库』(kb_type='global') |
| muse_knowledge_document | 每书一行挂私有库:file_hash=sha256、storage_ref=源文件相对路径 |
| example_reference_work | 参考书档案:作者/声明章数/导入章数/字符数/notes(修复统计) |
| muse_content_import_task | 审计一行:command_id=import- 幂等,source_snapshot=对账 JSON |
审查面
--dry-run与正式导入都打印对账表:声明章数 vs 导入章数、丢弃重复题数、尾部截断行、卷分隔数、章号异常数、总字数,另附首/中/末三章题目与正文首行抽样。- 导入后用 db skill 抽查:
query "SELECT order_no,title FROM muse_content_chapter WHERE work_id=… ORDER BY order_no LIMIT 5"。
红线
- 原文只入私有库(work/chapter/block + 私有 kb 档案),公共面(拆书范式)另走 B2 且脱敏;本 skill 不做任何内容改写(除实体解码与噪音标题行修复)。
- 同名作品不覆盖:必须显式
--force(软删旧行,审计可溯)。