返回 Skill 列表
extension
分类: 效率与办公无需 API Key

全自动解析小说工具

使用方式是新建一个文件夹,必须是英文名, 需要参考小说,解析后会得到一个小说章节拆解文件夹 和 一个语料库文件夹

person作者: MsidxshubModelScope

book-splitter — 小说全文分类索引工具

概述

将一本小说按 章节→分类 二维拆解,一次运行生成两套输出结构:

  1. 按章分 — 每章一个文件夹,内部按 父类→子类 存放该章片段
  2. 语料库 — 所有章节的片段按分类汇总到 语料库/,去掉章节层级,纯分类目录

快速开始

# 一步到位(小说可以是 .txt 或 .md,编码自动检测 UTF-8/GBK)
python .reasonix/skills/book-splitter/scripts/run_book_pipeline.py 你的小说.txt

运行完成后,当前目录下会生成:

  • 你的小说/你的小说_output/ — 章节输出
  • 语料库/ — 分类汇总语料库

命令参考

# 完整流程
python .reasonix/skills/book-splitter/scripts/run_book_pipeline.py <小说.txt> [输出目录名]

# 分步执行
python .reasonix/skills/book-splitter/scripts/split_chapter.py <小说.txt> [输出目录]
python .reasonix/skills/book-splitter/scripts/classify_chapter.py <章目录>
python .reasonix/skills/book-splitter/scripts/build_book_index.py <章节输出目录> [语料库目录]

# 查看规则引擎
python .reasonix/skills/book-splitter/scripts/rules.py

输出结构

输出A — 按章分

{输出目录}/
├── meta.json                     # 全书元信息
├── _全局统计.json               # 全局分类分布
│
├── 第1章_章名/
│   ├── raw.md                    # 本章完整原文
│   ├── _分类统计.json           # 本章分类统计
│   ├── 人物/
│   │   ├── 身份属性/
│   │   │   └── 身份属性_s0001-内容摘要前20字.md
│   │   ├── 性格心理/
│   │   ├── 对话/
│   │   └── ...
│   ├── 背景/
│   ├── 环境/
│   ├── 场景/
│   ├── 道具/
│   ├── 动作/
│   └── 叙述/
├── 第2章_章名/
│   └── ...
└── ...

输出B — 语料库

和章节输出同级,目录名为 语料库/

语料库/                              ← 数据语料库
├── _索引统计.json                   # 各子类文件数
│
├── 人物/
│   ├── 身份属性/                    # 全书所有身份属性片段
│   │   ├── 第1章_章名_身份属性_s0001-内容摘要前20字.md
│   │   └── 第3章_章名_身份属性_s0005-内容摘要前20字.md
│   ├── 性格心理/
│   ├── 对话/
│   ├── 能力体系/
│   ├── 关系网络/
│   ├── 人物弧光/
│   └── 日历/
├── 背景/
│   ├── 时代与世界/
│   ├── 世界观/
│   ├── 势力阵营/
│   ├── 种族物种/
│   ├── 文化习俗/
│   ├── 经济货币/
│   └── 语言术语/
├── 环境/
│   ├── 自然环境/
│   └── 感官氛围/
├── 场景/
│   ├── 场景标识/
│   ├── 场景功能/
│   └── 场景内道具/
├── 道具/
│   ├── 道具档案/
│   └── 流转轨迹/
├── 动作/
│   └── 战斗/
└── 叙述/
    ├── 修辞文风/
    ├── 结构/
    ├── 章节信息/
    └── 时间线/

文件名格式:{章名}_{子类}_{编号}-{内容摘要}.md

单个分类文件的格式

# 人物 · 身份属性

**来源片段**: `s0001`
**置信度**: 0.92
**实体**: 人物名A · 人物名B
**LLM待复核**: 否
**摘要**: 少年约莫十七八岁,身穿洗得发白的青布长衫...

---

(完整原文片段)

文件命名规则

  • 语料库中:第1章_浮村初遇_身份属性_s0001-少年约莫十七八岁.md = {章目录名}_{子类}_{片段编号}-{内容摘要}.md
  • 同一片段可出现在多个分类目录(一文多归)
  • 片段编号 s{序号} 按原文顺序排列,保留阅读顺序

检索方式

# 在语料库中查找某实体
grep -r "主角名" --include="*.md" 语料库/

# 查看语料库统计
cat 语料库/_索引统计.json

# 查看某章的完整分类统计
cat 第1章_章名/_分类统计.json

# 全书统计
cat _全局统计.json

分类体系(26 个子类)

| 父类 | 子类 | 说明 | |------|------|------| | 人物 | 身份属性 | 姓名/年龄/外貌/职业 | | 人物 | 性格心理 | 个性/欲望/内心活动 | | 人物 | 日历 | 时间节点/昼夜 | | 人物 | 能力体系 | 功法/招式/境界 | | 人物 | 关系网络 | 社会/情感/利益关系 | | 人物 | 对话 | 内容/对象/情绪/潜台词 | | 人物 | 人物弧光 | 成长轨迹/隐藏秘密 | | 背景 | 时代与世界 | 纪年/历史节点/节日 | | 背景 | 世界观 | 底层法则/超凡规则 | | 背景 | 势力阵营 | 门派/家族/国家 | | 背景 | 种族物种 | 非人族群特征 | | 背景 | 文化习俗 | 礼仪/禁忌/服饰饮食 | | 背景 | 经济货币 | 货币体系/物价/资源 | | 背景 | 语言术语 | 特有词汇/黑话/咒语 | | 环境 | 自然环境 | 地理/气候/天象(客观) | | 环境 | 感官氛围 | 视听嗅触描写/情绪基调(主观) | | 场景 | 场景标识 | 名称/描述/场景切换 | | 场景 | 场景功能 | 推进/展示/营造 | | 场景 | 场景内道具 | 场景关联道具 | | 道具 | 道具档案 | 名称/类型/功能/设定 | | 道具 | 流转轨迹 | 持有者变化/传承 | | 动作 | 战斗 | 战斗描写 | | 叙述 | 修辞文风 | 比喻/象征/句式 | | 叙述 | 结构 | 顺叙/倒叙/插叙/视角切换 | | 叙述 | 章节信息 | 章名/字数/视角 | | 叙述 | 时间线 | 时间推进标记 |

分类规则引擎逻辑

  1. 规则匹配:关键词命中 + 正则模式 → 置信度 0.00-0.99
  2. 置信度分级
    • ≥0.80 → 直接入库(规则确定,LLM待复核: 否
    • 0.40-0.79 → 标记 LLM待复核: 是(需精分)
    • <0.40 → 丢弃 / 兜底归入"叙述·章节信息"
  3. LLM 精分:对低置信度或多重匹配的片段,预留了 LLM 调用的桥接接口(segment_has_llm_work()
  4. 一文多归:同一片段可匹配多个分类,全部写入对应目录

工作流

当用户请求解析一本小说时:

  1. 确认小说文件路径
  2. 运行:
    python .reasonix/skills/book-splitter/scripts/run_book_pipeline.py <小说文件名>
    
  3. 查看输出统计:
    • 拆了多少章、多少语义片段
    • 分类覆盖率、需要 LLM 精分的片段数
    • 各分类的分布
  4. 向用户报告结果,询问下一步(浏览/搜索/LLM精分)

注意事项

  • 编码:自动检测 UTF-8 / GBK / GB18030,无需手动指定
  • 章节识别:支持 第X章/第X卷/序章/楔子/引子/尾声/番外 等格式;无标题时自动按 4000 字分卷
  • 语料库:每次运行清空重建,不保留旧数据
  • LLM 精分:当前仅实现了规则引擎,LLM待复核: 是 的片段预留了 bridge,需自行触发
  • 文件编码:所有输出文件为 UTF-8