novel-deconstructlisted
Install: claude install-skill 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 情绪标签词扫描
搜索「悲伤/愤怒/恐惧/幸福/美丽/紧张/焦虑/难过/开心/害怕/兴奋/激动/失望