3.3 KiB
Raw Blame History

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(软删旧行,审计可溯)。