# 题材权威枚举表（Genre Canonical List）

> 状态：`draft`（2026-04-16）
> 数据来源：番茄小说排行榜实际分类（2026-04 抓取）

## 设计目标

建立一套两层题材体系，让所有 CSV 的 `适用题材` 列、路由表的 `题材/流派`、裁决表的 `题材` 都有统一的枚举值可以对齐。

## 题材 vs 套路：核心区分

**题材**回答"故事发生在什么世界"——都市、玄幻、仙侠、古言……

**套路**回答"用什么模式讲故事"——退婚、系统、无限、重生、赘婿、快穿任务……

同一个套路可以跨题材：系统流可以在玄幻里，也可以在都市里。因此所有"X流"（退婚流、系统流、无限流、赘婿流、重生流、副本流……）**不是题材**，归入 `桥段套路.csv`。

当用户输入"我要写退婚流"时，路由需要做两件事：
1. **题材判定**：退婚流最常见于传统玄幻 → canonical_genre = `玄幻`
2. **套路匹配**：在 `桥段套路.csv` 中检索"退婚"相关条目

路由表 `题材与调性推理.csv` 的 `题材别名` 列可以包含套路名作为识别入口，但 `题材/流派` 列本身只填 platform_tag（番茄分类名），不填套路名。

---

## 两层结构

```
Layer 1: canonical_genre  （15 个，我们定义）
    ├── 用于 CSV 所有表的 `适用题材` 列
    ├── 用于 裁决规则.csv 的 `题材` 列（每个 canonical 至少一行裁决）
    └── 用于 reference_search.py 的 --genre 筛选

Layer 2: platform_tag  （37 个，番茄原始分类）
    ├── 用于 题材与调性推理.csv 的 `题材/流派` 列（路由入口粒度）
    ├── 用于 题材与调性推理.csv 的 `题材别名` 列（输入识别，可含套路名以提升命中）
    └── 每个 platform_tag 映射到且仅映射到一个 canonical_genre

不属于题材体系的概念（住在其他表里）：
    - 套路/模式（退婚、系统、无限、重生……）→ 桥段套路.csv
    - 调性标签（爽文、深度剧情、现实向……）→ 裁决规则.csv 的风格优先级
    - 场景标签（战斗、推理、日常……）→ 场景写法.csv
    - 形式标签（短篇、互动小说……）→ 不入库
```

**规则**：
- `适用题材` 列只允许填写 canonical_genre 枚举值或 `全部`
- `题材与调性推理.csv` 的 `题材/流派` 填 platform_tag（番茄子分类级别）
- `裁决规则.csv` 的 `题材` 填 canonical_genre（大类级别）
- 用户在 init 阶段输入任意文本 → `_route()` 先匹配 platform_tag → 再映射到 canonical_genre
- 一个 canonical_genre 可以对应多个 platform_tag，但一个 platform_tag 只归属一个 canonical_genre
- 套路名可以出现在路由表的 `题材别名` 列用于识别，但不作为题材枚举值

---

## Layer 1: Canonical Genre 枚举

### 男频

| # | canonical_genre | 说明 | 包含的 platform_tag |
|---|----------------|------|-------------------|
| 1 | `都市` | 现代都市背景，含日常/修真/高武/赘婿/种田/脑洞 | 都市日常、都市修真、都市高武、战神赘婿、都市种田、都市脑洞 |
| 2 | `玄幻` | 东方玄幻世界观，升级/战斗/大陆争霸 | 传统玄幻、玄幻脑洞 |
| 3 | `仙侠` | 道家修仙体系，宗门/天劫/飞升 | 东方仙侠 |
| 4 | `奇幻` | 西方奇幻体系，魔法/种族/史诗 | 西方奇幻 |
| 5 | `科幻` | 科幻/末世/赛博朋克 | 科幻末世 |
| 6 | `历史` | 历史/古代/架空历史/军事/谍战 | 历史古代、历史脑洞、抗战谍战 |
| 7 | `悬疑` | 悬疑/推理/灵异/惊悚 | 悬疑脑洞、悬疑灵异 |
| 8 | `游戏` | 游戏/电竞/体育竞技 | 游戏体育 |

### 女频

| # | canonical_genre | 说明 | 包含的 platform_tag |
|---|----------------|------|-------------------|
| 9 | `古言` | 古代言情背景，宫廷/宅斗/江湖 | 古风世情、宫斗宅斗、古言脑洞 |
| 10 | `现言` | 现代言情，含甜宠/豪门/职场/娱乐圈 | 现言脑洞、青春甜宠、星光璀璨、职场婚恋、豪门总裁 |
| 11 | `幻言` | 玄幻/仙侠 + 言情 | 玄幻言情 |
| 12 | `年代` | 民国/年代/近现代历史言情 | 年代、民国言情 |
| 13 | `种田` | 种田/经营/基建/慢生活 | 种田 |
| 14 | `快穿` | 快穿/世界穿梭/多世界任务 | 快穿 |

### 跨频

| # | canonical_genre | 说明 | 包含的 platform_tag |
|---|----------------|------|-------------------|
| — | `科幻` | 男女频共用 | 科幻末世（女频同名） |
| — | `悬疑` | 男女频共用 | 悬疑脑洞（女频同名）、女频悬疑 |
| — | `游戏` | 男女频共用 | 游戏体育（女频同名） |
| 15 | `衍生` | 同人/二次创作（低优先级） | 动漫衍生、男频衍生、女频衍生 |

### 保留值

| 值 | 含义 |
|----|------|
| `全部` | 该条目适用于所有题材，不做题材筛选 |

---

## Layer 2: Platform Tag → Canonical 完整映射

### 男频（19 个 platform_tag）

| platform_tag | canonical_genre | 频道 | 调性特征（用于路由表区分同 canonical 下的差异） |
|-------------|----------------|------|-------------------------------------------|
| 都市日常 | `都市` | 男 | 日常轻松，低冲突，温情/搞笑 |
| 都市修真 | `都市` | 男 | 现代背景 + 修炼体系，隐藏修炼者 |
| 都市高武 | `都市` | 男 | 现代背景 + 武道/异能，战斗密度高 |
| 战神赘婿 | `都市` | 男 | 身份反差，先压后爆，打脸主线 |
| 都市种田 | `都市` | 男 | 都市背景 + 经营/积累/慢成长 |
| 都市脑洞 | `都市` | 男 | 都市背景 + 高概念/奇思设定 |
| 传统玄幻 | `玄幻` | 男 | 经典大陆/升级/宗门/争霸 |
| 玄幻脑洞 | `玄幻` | 男 | 玄幻背景 + 非常规设定/反套路 |
| 东方仙侠 | `仙侠` | 男 | 道家修仙，宗门/天劫/飞升/因果 |
| 西方奇幻 | `奇幻` | 男 | 魔法/种族/骑士/史诗叙事 |
| 科幻末世 | `科幻` | 男 | 科技/末世/生存/星际 |
| 历史古代 | `历史` | 男 | 正统历史/架空朝代/争权/种田 |
| 历史脑洞 | `历史` | 男 | 历史背景 + 穿越/系统/高概念 |
| 抗战谍战 | `历史` | 男 | 近代战争/谍报/军事行动 |
| 悬疑脑洞 | `悬疑` | 男 | 悬疑 + 脑洞设定/规则类 |
| 悬疑灵异 | `悬疑` | 男 | 灵异/鬼怪/民俗恐怖 |
| 游戏体育 | `游戏` | 男 | 电竞/游戏世界/体育竞技 |
| 动漫衍生 | `衍生` | 男 | 动漫 IP 二创 |
| 男频衍生 | `衍生` | 男 | 其他 IP 二创 |

### 女频（18 个 platform_tag）

| platform_tag | canonical_genre | 频道 | 调性特征 |
|-------------|----------------|------|---------|
| 古风世情 | `古言` | 女 | 古代日常/家族/人情世故 |
| 宫斗宅斗 | `古言` | 女 | 宫廷/宅院权谋，女性博弈 |
| 古言脑洞 | `古言` | 女 | 古代背景 + 穿越/重生/高概念 |
| 现言脑洞 | `现言` | 女 | 现代言情 + 脑洞设定 |
| 青春甜宠 | `现言` | 女 | 校园/青春/纯甜/低虐 |
| 星光璀璨 | `现言` | 女 | 娱乐圈/明星/偶像 |
| 职场婚恋 | `现言` | 女 | 职场 + 婚恋/契约/都市 |
| 豪门总裁 | `现言` | 女 | 豪门/财阀/阶层差 |
| 玄幻言情 | `幻言` | 女 | 玄幻/仙侠世界 + 言情主线 |
| 年代 | `年代` | 女 | 50s-90s 中国/近现代日常 |
| 民国言情 | `年代` | 女 | 民国背景 + 言情 |
| 种田 | `种田` | 女 | 农村/经营/基建/慢节奏积累 |
| 快穿 | `快穿` | 女 | 多世界穿梭/任务/攻略 |
| 科幻末世 | `科幻` | 女 | 科幻/末世 + 生存/言情 |
| 悬疑脑洞 | `悬疑` | 女 | 悬疑 + 脑洞设定 |
| 女频悬疑 | `悬疑` | 女 | 女性视角悬疑/推理 |
| 游戏体育 | `游戏` | 女 | 电竞/游戏/体育 + 言情 |
| 女频衍生 | `衍生` | 女 | 女频 IP 二创 |

---

## 常见用户输入别名 → 题材映射

> 此表用于扩展 `题材与调性推理.csv` 的 `题材别名` 列，提升路由命中率。
> 套路名（退婚、系统、无限……）可作为别名用于识别用户意图，但最终映射到 platform_tag 而非套路本身。

### 纯题材类别名

| 用户可能输入 | 映射到 platform_tag | canonical_genre |
|-------------|-------------------|----------------|
| 修仙、修真、修道 | 东方仙侠 / 都市修真 | 仙侠 / 都市 |
| 末世、丧尸、废土 | 科幻末世 | 科幻 |
| 甜宠、纯甜、齁甜 | 青春甜宠 | 现言 |
| 宫斗、宅斗、后宫争斗 | 宫斗宅斗 | 古言 |
| 总裁文、霸总 | 豪门总裁 | 现言 |
| 娱乐圈、明星 | 星光璀璨 | 现言 |
| 基建、经营、种地 | 种田 | 种田 |
| 民国 | 民国言情 | 年代 |
| 电竞、网游 | 游戏体育 | 游戏 |
| 同人、二创 | 动漫衍生 / 女频衍生 | 衍生 |
| 克苏鲁、诡秘 | 悬疑灵异 | 悬疑 |
| 谍战、抗日 | 抗战谍战 | 历史 |
| 赛博朋克、星际 | 科幻末世 | 科幻 |
| 异能 | 都市高武 | 都市 |

### 含套路名的别名（用于路由识别，套路本身住在 `桥段套路.csv`）

| 用户可能输入 | 映射到 platform_tag | canonical_genre | 同时触发桥段套路检索 |
|-------------|-------------------|----------------|-------------------|
| 退婚流、莫欺少年穷、三年之约 | 传统玄幻 | 玄幻 | 退婚、废材逆袭 |
| 赘婿流、上门女婿 | 战神赘婿 | 都市 | 赘婿、身份反转 |
| 系统流、面板流、系统文 | 传统玄幻 / 都市修真 | 玄幻 / 都市 | 系统激活、系统升级 |
| 无限流、副本流 | 悬疑脑洞 | 悬疑 | 副本、规则挑战 |
| 规则怪谈、规则动物园 | 悬疑脑洞 | 悬疑 | 规则解读、违规惩罚 |
| 重生、重生复仇 | 都市脑洞 / 古言脑洞 | 都市 / 古言 | 重生、信息差碾压 |
| 穿越、穿书 | 历史脑洞 / 古言脑洞 | 历史 / 古言 | 穿越适应、知识碾压 |

**注意**：部分别名（如"系统流""重生""穿越"）可映射到多个 platform_tag——路由表需要用 `关键词`+`意图与同义词`+`适用题材` 联合判定，不能只靠别名单字段。

---

## 与现有 CSV 的对齐规则

### 1. `适用题材` 列（所有 9 张表）

- 只允许填写 canonical_genre 枚举值（上述 15 个）或 `全部`
- 多值用 `|` 分隔：`都市|玄幻|仙侠`
- **迁移计划**：现有数据中的非枚举值需逐条映射到 canonical，见下方 [迁移映射表](#现有非枚举值迁移映射)

### 2. `裁决规则.csv` 的 `题材` 列

- 只填 canonical_genre
- 每个 canonical_genre 至少一行裁决规则
- 粒度：大类级别（不按 platform_tag 拆行）

### 3. `题材与调性推理.csv` 的 `题材/流派` 列

- 填 platform_tag（子流派级别）
- 每个 platform_tag 一行路由规则
- `题材别名` 列填该 platform_tag 的所有别名
- 新增 `canonical_genre` 列：显式声明该行归属的 canonical_genre

### 4. `reference_search.py --genre` 参数

- 接受 canonical_genre 或 platform_tag
- 如果输入是 platform_tag，先映射到 canonical_genre 再做筛选
- `_genre_matches()` 用 canonical_genre 匹配 CSV 中的 `适用题材` 列

---

## 现有非枚举值迁移映射

> 以下值目前存在于各 CSV 的 `适用题材` 列中，但不属于 canonical 枚举。需迁移。

| 现有值 | → canonical_genre | 说明 |
|--------|------------------|------|
| 东方仙侠 | `仙侠` | platform_tag，降级为 canonical |
| 西方奇幻 | `奇幻` | 同上 |
| 科幻末世 | `科幻` | 同上 |
| 都市日常 | `都市` | 同上 |
| 都市修真 | `都市` | 同上 |
| 都市高武 | `都市` | 同上 |
| 历史古代 | `历史` | 同上 |
| 谍战 | `历史` | 归入历史大类 |
| 刑侦 | `悬疑` | 归入悬疑大类 |
| 惊悚 | `悬疑` | 归入悬疑大类 |
| 推理 | `悬疑` | 归入悬疑大类 |
| 规则怪谈 | `悬疑` | 归入悬疑大类 |
| 末世 | `科幻` | 归入科幻大类 |
| 赛博朋克 | `科幻` | 归入科幻大类 |
| 军事 | `历史` | 归入历史大类 |
| 武侠 | `历史` | 番茄已无独立武侠类，归入历史 |
| 权谋 | `古言` / `历史` | 按频道：古言权谋→古言，历史权谋→历史 |
| 轻小说 | `衍生` | 番茄归入衍生类 |
| 网游 | `游戏` | 归入游戏大类 |
| 电竞 | `游戏` | 归入游戏大类 |
| 竞技 | `游戏` | 归入游戏大类 |
| 体育 | `游戏` | 番茄合并为"游戏体育" |
| 系统文 | 删除 | 套路名，不是题材。条目的 `适用题材` 改为实际背景题材（`玄幻`/`都市`），套路入 `桥段套路.csv` |
| 无限流 | 删除 | 套路名。条目改为 `悬疑`，套路入 `桥段套路.csv` |
| 狗血 | 删除 | 调性标签，不是题材 |
| 爽文 | 删除 | 调性标签 |
| 深度剧情 | 删除 | 调性标签 |
| 现实向 | 删除 | 调性标签 |
| 群像 | 删除 | 叙事结构标签 |
| 史诗 | 删除 | 调性标签 |
| 动作 | 删除 | 场景标签 |
| 心理 | 删除 | 场景标签 |
| 战争 | 删除 | 场景标签 |
| 灾难 | 删除 | 场景标签 |
| 长篇 | 删除 | 形式标签 |
| 知乎短篇 | 删除 | 形式标签 |
| 商战 / 商业 | `都市` / `现言` | 按频道 |
| 校园 / 青春 | `现言` | 归入现言 |
| 娱乐圈 | `现言` | 番茄"星光璀璨" |
| 职场 | `现言` | 番茄"职场婚恋" |
| 冒险 / 探险 | `奇幻` / `玄幻` | 按世界观判定 |
| 同人 | `衍生` | |
| 互动小说 / 小程序短篇风 / 知乎短篇风 | 删除 | 形式标签，不属于题材体系 |
| 高武 | `都市` | 番茄"都市高武" |
| 古董文 | `悬疑` / `历史` | 按侧重判定 |

### "删除"的处理

标记为"删除"的值不是说条目要删——而是该条目的 `适用题材` 需要改填实际的 canonical_genre，或改为 `全部`。

例如：一条标注 `适用题材=狗血` 的桥段套路，应该改为 `适用题材=现言|古言`（如果它只适用于言情类）或 `全部`（如果它跨题材通用）。

---

## Canonical 枚举汇总（速查）

```
都市  玄幻  仙侠  奇幻  科幻
历史  悬疑  游戏  古言  现言
幻言  年代  种田  快穿  衍生
全部（保留值）
```

共 15 个 canonical_genre + 1 个保留值。
