# Novel Deconstruct

> 拆书——对网络小说进行深度结构分析。输入番茄小说等平台的链接，自动抓取、解码、分析，输出七步骨架/冲突三层/人物弧光/对话技法/节奏控制等维度的拆书报告。触发词：拆书、拆解、分析这本小说、帮我看看这本书。

- Skill: `qq-l-xx/novel-deconstruct` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add qq-l-xx/novel-deconstruct`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qq-l-xx/novel-deconstruct/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: qq-l-xx (https://skillmd.com/u/qq-l-xx)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/qq-l-xx/novel-deconstruct

---


# Novel Deconstruct — 拆书技能

对网络小说进行系统性的写作技法分析。自动处理字体反爬、章节抓取、定量扫描、场景级深度拆解全流程。

## 检测流程

```
用户提供小说链接
├─ 番茄小说 (fanqienovel.com) → 字体解码 + API抓取
├─ 其他平台 → 通用网页抓取
└─ 用户直接粘贴文本 → 跳过抓取，直接分析
```

---

## Step 1: 获取元数据

读取小说主页，提取：
- 书名、作者、简介、题材标签、总字数、更新状态
- 完整章节目录（含每章标题）
- 章节总数 N

---

## Step 2: 抓取正文

### 番茄小说

1. 从主页 HTML (`__INITIAL_STATE__` JSON) 提取 `chapterListWithVolume`
2. 从 CSS 提取自定义字体 URL (woff2) → `tools/decode_font.py` 用 fontTools + ddddocr 建 PUA→汉字映射表
3. 按采样策略批量请求 reader API (`fanqienovel.com/reader/{itemId}`)，用映射表解码正文

### 采样策略

| 范围 | 策略 | 用途 |
|------|------|------|
| Ch 1-10 | **全文** | 开局分析（激励事件/人物引入/世界观建立） |
| Ch 11-N | 每 N/8 章取1章 | 结构采样（幕转折/冲突升级/人物弧光） |
| 最后10章 | **全文** | 结局分析（高潮/收束/主题落点） |

总计约 20-30 章。番茄免费章节通常仅前10章，后续章节可能需要登录 Cookie 或第三方镜像站。

---

## Step 3: 定量扫描（必做，不可跳过）

对每章正文执行以下自动化扫描，输出数据表：

### 3.1 基础指标

| 指标 | 方法 |
|------|------|
| 字数 | `len(re.sub(r'\s', '', body))` |
| 段落数 | 按换行分割 |
| 场景数 | 按空行/`-`/`—`/视角切换分割 |
| 句均长 | 以 `。！？；…` 断句，取均值 |
| 短句% | ≤15字的句子占比 |
| 长句% | >25字的句子占比 |
| 对话% | 含对话标记的段落占比 |
| 了/段 | 「了」字总数 ÷ 段落数 |

### 3.2 疲劳词扫描（逐词计数，输出单章+总计）

按以下分类，使用 `body.count(word)` 逐词扫描：

| 类别 | 词表 | 阈值 |
|------|------|------|
| 副词 | 突然/忽然/猛然/竟然/居然/渐渐/逐渐/依旧/仍然/默默/微微 | 各≤3次/章 |
| 动词模板 | 露出/陷入/涌起/泛起/浮现/充斥 | 各≤3次/章 |
| 连接词 | 然而/不过/于是/随即/紧接着/与此同时 | 各≤4次/章 |
| 身体模板 | 瞳孔一缩/身体一僵/倒吸一口凉气/呼吸一滞 | 各≤2次/章 |
| 含混词 | 仿佛/宛如/好像/似乎 | 合计≤2次/500字 |
| 「让」字 | 让/令/使 | **专项统计**（指南禁止项） |
| 「不是…而是…」 | 正则 `不是.{0,20}而是` | ≤3次/章 |

### 3.3 情绪标签词扫描

搜索「悲伤/愤怒/恐惧/幸福/美丽/紧张/焦虑/难过/开心/害怕/兴奋/激动/失望/绝望」等词，**区分对话中出现 vs 旁白中出现**。旁白中出现即违规。

### 3.4 章标题风格聚类

将所有章节标题按风格分为五类：
- **感官期**：具象名词（食物名、动作、对话片段）
- **事件期**：情节节点（冲突、转折、新信息）
- **状态期**：心理/关系状态描述
- **悬念期**：省略号、对话片段、抽象概念
- **收束期**：短句、意象、情感落点

---

## Step 4: 场景级深度拆解

对**前10章全文**逐章逐场景执行以下分析：

### 4.1 每章输出

```
场景切分图（场景1/2/3…字数+POV+内容概要）
↓
关键段落逐段功能标注（激励事件/世界观渗透/人物引入/弧光推进/钩子）
↓
鸿沟检查（场景内人物期望 vs 世界实际反应）
↓
技法点评（冰山对话/以景写情/镜头感/倒叙/详略判断）
↓
章末钩子质量评估
```

### 4.2 场景切分规则

- 空行、单独成段的 `-`/`—`/`...` = 场景边界
- POV 人物切换 = 场景边界
- 时间/空间跳跃 = 场景边界
- 单场景章（如Ch4/Ch7）标记为情感高潮章

### 4.3 鸿沟检查方法

对每个场景回答三个问题：
1. 人物的期望是什么？
2. 世界实际给出了什么反应？
3. 两者之间是否有裂缝（反应 ≠ 期望）？

无裂缝 → 标记「无效场景」。

### 4.4 冰山对话检查

摘录每章最核心的对话段落，检查：
- 人物说出来的话（水上1/8）vs 真正的意图（水下7/8）
- 是否通过回避/犹豫/沉默/过度否认来传递水下信息
- 有没有人物直接说出自己的真实意图（= 违规）

---

## Step 5: 逐章价值变化追踪

建立 10章 × 6维度 的变化矩阵：

| 维度 | 检查方法 |
|------|---------|
| 处境变化 | 人物外部处境的正↔负转换（安全↔危险/富有↔贫穷等） |
| 关系变化 | 人物间关系的正↔负转换（亲近↔疏远/信任↔怀疑等） |
| 认知变化 | 人物对世界/他人/自己的理解的正↔负转换 |
| 情绪方向 | 本章主导情绪的起→落方向 |
| 钩子类型 | 信息悬念/情感悬念/情境悬念/情感收束 |
| 核心规律 | 每章是否至少一个维度发生可感知变化？ |

---

## Step 6: 结构层分析

### 6.1 七步骨架

对照 `story-craft-reference.md`，逐步骤标注在正文/章节目录中的对应位置。

### 6.2 激励事件

- 定位精确章节/段落
- 检查是否在故事前四分之一处
- 验证双欲望设计（自觉+不自觉）
- 检查是否发生在读者面前（非幕后）

### 6.3 幕结构切分

基于章节标题和内容转折点，将全书切分为 6-8 幕，每幕标注：
- 起止章节 + 章节数
- 核心冲突 + 转折节点
- 对抗力量等级（对立面/矛盾体/反讽）

### 6.4 冲突三层缠绕验证

选取关键章节，验证三层冲突是否同时推进且互相缠绕。

---

## Step 7: 输出报告

报告保存到 `{用户桌面}/拆书_{书名}/` 或用户指定目录。

### 报告结构（18章标准模板）

```
一、作品档案
二、七步骨架分析
三、激励事件分析
四、鸿沟推进机制
五、冲突三层法则
六、对抗力量升级路径
七、叙事视角分析
八、对话分析（冰山对话 + 镜头感）
九、句式与文风分析
十、人物塑造分析（主角面具/真相/弧光 + 群像功能）
十一、节奏分析（节奏图 + 章末钩子检查）
十二、逐章定量扫描（基础指标表 + 疲劳词扫描 + 情绪标签词扫描）
十三、逐章逐场景深度拆解（Ch1-10，每章场景切分+功能标注+鸿沟检查+技法点评）
十四、逐章价值变化追踪（6维矩阵）
十五、八幕结构全景（基于全本章节标题）
十六、章标题风格演变（五阶段聚类）
十七、结构总评（优势 + 可改进）
十八、拆书结论（评分表 + 一句话总结）
```

### 评分维度

| 维度 | 满分 |
|------|------|
| 选题 | ★★★★★ |
| 结构 | ★★★★★ |
| 人物 | ★★★★★ |
| 对话 | ★★★★★ |
| 文笔 | ★★★★★ |
| 世界观 | ★★★★★ |
| 商业性 | ★★★★★ |

---

## 工具脚本

| 脚本 | 用途 |
|------|------|
| `tools/decode_font.py` | 番茄字体解码：下载woff2 → fontTools解析cmap → ddddocr OCR识别 → 输出映射JSON |
| `tools/fetch_novel.py` | 批量章节抓取：读取章节列表 → 采样 → 逐章请求+解码 → 保存TXT |

## 依赖

```bash
pip install fonttools brotli Pillow ddddocr requests
```

## 分析参照

本技能分析时参照以下理论框架：
- AI写作规范指南 V3.0（麦基《故事》+ 许荣哲《小说课》+ 布兰德《成为作家》）
- awesome-novel-skill 的 story-craft-reference.md（七步骨架/三番四震/鸿沟机制/人物弧光等）
- awesome-novel-skill 的 chapter-quality-checklist.md（15项验收标准）
- awesome-novel-skill 的 common-rules.md（疲劳词阈值/句式规则/镜头感对话/以景写情/活人感）

