小说分析仿写
触发场景
用户说类似:"分析一下这位作者的写作风格" / "整理这批小说看看风格特点" / "检测下有没有代笔" / "金庸和古龙文风有什么不同" / "把这批 TXT 做个风格指纹" / "以某作者风格写一段小说" / "仿写金庸开篇并验证像不像" 时启用。
功能介绍
把"文风赏析"变成可量化、可复现、可解释的特征工程:给技能一批某作者的小说 TXT,它提取 40+ 个文体学指标(句长波动、对话占比、破折号/四字格/复句密度、章节均匀度、格言密度、人称视角、悲情词、章回套语等),生成该作者的"风格指纹",并据此做三件事:
- 风格分析:输出可视化的风格指纹报告(对照表 + 雷达图 + 逐部明细),让"某文本更像哪位已知作者"这类问题有数据支撑,而非凭感觉。
- 风格仿写:用指纹反推出的"风格配方"驱动 AI 写作,再自动回检贴近度,证明"写像了"——覆盖网文、悬疑、历史、言情、科幻等任意题材,不限于任何特定类型。
- 代笔 / 伪书 / 风格漂移检测:对照已知作者基线,标出在多个核心维度显著偏离"亲笔"均值的作品,辅助识别代笔、伪书或后期风格突变。
技能内置 34 位作者指纹基线(金庸、古龙、猫腻、马伯庸、辰东、priest、会说话的肘子、顾漫等跨题材作者),开箱即可对任意已内置作者仿写 / 回检;要扩更多作者,把语料丢进 --corpus 重跑即自动建库,零改代码。
适合:小说 corpus 整理、作者风格研究、网文代笔检测、AI 写作去味、文学课程素材、个人小说鉴赏与仿写方法论沉淀。
操作使用说明(快速上手)
下面是最佳路径;每个步骤的细项在对应章节。所有路径均用参数或环境变量(NOVEL_CORPUS_ROOT / NOVEL_BASELINE_DIR)传入,不内置任何个人路径。
场景一:分析某作者风格
- 准备语料:建文件夹
语料根/作者名/*.txt(每部小说一个 txt,支持嵌套子目录与 gb18030/UTF-8 混编码)。 - 跑分析:
bash python scripts/style_analyzer.py --corpus /path/to/语料根 --out /path/to/产出
自动识别每位作者并产出作者名风格特征_deep.json。 - 看报告:把 JSON 注入报告模板,得到对照表 / 雷达图 / 逐部明细;判定归属或代笔嫌疑见
references/判定阈值.md。
场景二:仿写某作者风格(分析 → 写 → 回检)
- 先反问(必做):接到"以某风格写小说"时,不要直接动笔,先跑题材简报反问(9 题,2 必答):
bash python scripts/generate_with_style.py --interview - 取配方并生成:依简报给出写作指令;可用
--style <作者id>取该作者风格配方(gu/jy或任意已分析作者如猫腻/辰东)。 - 回检 + 全检:
bash python scripts/generate_with_style.py --style jy --check 我的草稿.txt --qa --report
三级门槛(短篇≥0.25 / 中篇≥0.45 / 长篇≥0.70)达标即"写像了";--qa再跑精品度 / 违规 / 简报对齐四道闸。
场景三:代笔 / 伪书检测
- 把疑似伪书放
作者名/待确认/,auto_discover()自动隔离不污染真品均值;用待确认组 summary 与真品均值做跨维度偏离(>2σ 标异常,交人工复核)。
场景四:多作者批量建库 + 维度校准
export NOVEL_CORPUS_ROOT=/path/to/语料根
python scripts/style_analyzer.py --corpus $NOVEL_CORPUS_ROOT --out /path/to/产出
python scripts/calibrate_dimensions.py --indir /path/to/产出 # 维度区分力排名 + 多作者对照表
把产出的 *风格特征_deep.json 放进 examples/ 或设 NOVEL_BASELINE_DIR / --baselines 即可扩充仿写 / 回检基线库,零改代码。
核心目标
把"文风赏析"变成可量化、可复现、可解释的特征工程:每个结论都能追到原始文本的某个计数,不靠主观感受。
输入规范
- 目录结构:
语料根/作者名/*.txt(或作者名/亲笔/*.txt+作者名/待确认/*.txt拆分),每部小说一个 txt。 - 多作者自动扫描:直接把"含各作者子目录的文件夹"当语料根,
auto_discover()会自动把每个顶层子目录识别为一位作者,无需手工登记。 - 编码:优先 UTF-8,非 UTF-8 按 gb18030 解码(见
scripts/style_analyzer.py的detect_enc)。 - 预处理:剥离 HTML、去截断标注、跳开头 3% 目录块。
- 完整性门槛:单部 < 1 万汉字视为异常,需标注。
使用流程
- 准备数据:把作者 TXT 放进文件夹,每位作者一个子目录(参考下面的多作者扫描)。
- 跑分析(二选一):
- A. 多作者自动扫描(推荐):直接扫整文件夹,自动识别所有作者并各出一份_deep.json:
python scripts/style_analyzer.py --corpus /path/to/语料根 --out /path/to/产出
产出在<语料根>/风格指纹产出/下,每位作者一个作者名风格特征_deep.json。
- B. 指定语料根(二选一):--corpus <目录>或环境变量NOVEL_CORPUS_ROOT指向含各作者子目录的根;两者皆无则提示缺少语料并退出(不再内置个人路径)。 - 出报告:用
examples/里的 HTML 思路(或自行)注入 JSON 生成报告,含对照表、特征雷达、逐部明细。 - 判定:对照
references/判定阈值.md,多维度交叉判断风格归属 / 代笔嫌疑。
- 优先看 6 个核心判别指纹(破折号、格言、复句、章节CV、时间副词、悲情词)。
- 反向指纹(章回套语、语气词、四字格、文言)高而正向指纹低 → 判非古龙。
多作者批量扫描
场景:你有一个装着几十位作者 TXT 的大文件夹,不想逐个改 CONFIG。
export NOVEL_CORPUS_ROOT=/path/to/语料根 # 可选,省去 --corpus
python scripts/style_analyzer.py --corpus /path/to/语料根 --out /path/to/产出
auto_discover() 识别规则(无需改代码):
- 顶层子目录(排除 _待分类/新建文件夹/备份/回收站)= 一位作者;其下所有 txt(含嵌套子目录)归该作者。
- 若作者目录内含 亲笔 / 待确认 / 伪书 子目录 → 自动拆成「作者」(真品) 与「作者_待确认」(疑似伪书),后者不污染真品均值。
- _待分类/ 内文件按文件名 作者:XXX 解析为独立作者基准;若该作者已有顶层目录则跳过(避免重复覆盖)。
产出:<out>/作者名风格特征_deep.json × N 位作者,可直接拼成多作者基准库,用于交叉比对"某文本更像谁"。
语料卫生 / 伪书分组
为什么重要:把疑似代笔/残本/网页尾巴的 txt 和真品混在一起算均值,会把作者指纹拉偏。
规范做法:
1. 拿到一批 txt 先扫描去重(MD5 完全一致删、同作品异名留大删小),归并到 作者名/ 下。
2. 疑似伪书单独放 作者名/待确认/(或顶层 待确认/),auto_discover 会自动隔离。
3. 判伪书:用 待确认 组跑出的 summary 与真品均值做跨维度偏离(>2σ 即标异常,交人工复核),不要直接下结论。
详见 references/判定阈值.md 的伪书判定段。
维度速览(40+)
规模 / 句法(句长CV、复句密度)/ 对话(占比、轮次、情绪)/ 修辞(比喻)/ 拟古(四字格、文言)/ 视角(人称、实体密度)/ 结构(章节CV)/ 节奏(破折号、省略号、时间副词、标点熵)/ 景物(环境、动作)/ 悬念(章末钩子)/ 格言 / 高阶(起势词、章回套语、悲情词、语气词、句长突兀度、人称分布)。
完整定义见 references/维度定义.md。
坑点
GBK 乱码、纯汉字丢标点、HTML 残页、目录块污染、章节数误判、关键词近义漏检——对策见 references/坑点对策.md。
扩展示例
- 加作者(多作者扫描):直接把作者子目录放进语料根,跑
--corpus即自动识别,零改代码。若要固定/扩充基准库,把作者*风格特征_deep.json放进examples/,或设NOVEL_BASELINE_DIR/--baselines <目录>指向的目录即可(无需改代码)。 - 加维度:在
analyze_file计算新指标 →run()的 summary 聚合 →维度定义.md补说明。 - 多作者对照与维度校准:跑完全部作者后,用
scripts/calibrate_dimensions.py --indir <风格指纹产出>生成维度区分力排名.json+多作者风格对照.html+.csv,看哪些维度真能区分作者(跨作者 CV 高=核心指纹,CV<0.15=弱区分建议降权),据此调整回检权重或维度集。
去 AI 味方法论
仿写/AI 生成文本常被 AI 检测工具(如朱雀)判为"AI 生成"。本技能的指纹回检衡量"像不像某作家",与"像不像 AI"方向相反——高度风格化的名家写法(古龙破折号、情绪密度)反而会被检测模型当成"非典型人类"误判为 AI。
核心方法论(6 法 + 真人杂质注入 + 检测冲突说明)见 references/去AI味方法论.md,可直接套用在你的仿写/润色流程里。
风格生成 + 回检
把"分析"闭环到"生成":用指纹反推的风格配方驱动仿写,再回检贴近度,证明写像了。
用法:
# 打印某风格配方(据指纹反推的约束清单,供大模型/人工据以写作)
python scripts/generate_with_style.py --style gu # 古龙配方
python scripts/generate_with_style.py --style jy # 金庸配方
# 回检一段文本对某风格的贴近度(0-1,越高越像)
python scripts/generate_with_style.py --style gu --check 我的草稿.txt --report
check_text(text, target) 也可在代码里直接调用,返回 (贴近度, 明细dict)。
生成闭环工作流:
1. 取配方 → 2. 据配方写/生成一段 → 3. --check 回检 → 4. 贴近度未达标则调短句/破折号/格言比例重生成 → 5. 达标即"写像了"。
核心指纹权重见 scripts/generate_with_style.py 的 WEIGHTS(破折号/格言/复句/时间副词/悲情词为正向,章回套语/四字格/文言为反向)。
多基线(任意已分析作者均可仿写/回检):--style 不再限于 gu/jy,可填任意已分析作者 id(如 猫腻/辰东/梁羽生)。机制:
- load_all_baselines() 自动扫描 examples/ + 环境变量 NOVEL_BASELINE_DIR + --baselines <目录> 下所有 *风格特征_deep.json,构建多基线注册表;
- auto_weights(target) 按"该作者相对全体基线均值的 z 偏离"自动定每个维度的方向与权重(偏离越强越能区分该作者),无需手工写权重;
- check_text(text, target) 贴近度 = 1 - d_target/(d_target+d_other)(d_target=文本到目标距离,d_other=文本到全体其他作者距离均值),并附"最像的 top3 作者"排名辅助判断"像谁";
- gu/jy 仍保留手写精细配方(STYLE_RECIPES),其余作者由判别维度自动生成风格约束。
接入你自己分析的作者:把 style_analyzer.py --corpus 跑出的 *风格特征_deep.json 产出目录设为基线库即可:
# 回检一段文本像不像"猫腻"(需先有猫腻的指纹基线)
python scripts/generate_with_style.py --style 猫腻 --check 我的草稿.txt --baselines /path/to/风格指纹产出
# 或设环境变量后省略 --baselines
export NOVEL_BASELINE_DIR=/path/to/风格指纹产出
> 注:绝对贴近度因作者风格独特性而异(古龙极独特易高分,金庸/现代网文有重叠偏低),相对排名比绝对阈值更可靠;三级门槛(短篇≥0.25/中篇≥0.45/长篇≥0.70)仍可作参考,但判"写像了"建议结合 top3 排名。
回检贴近度解读(重要):
- 回检算法已做三项鲁棒性修正:① 单侧饱和距离(本作比目标"更浓"不扣分,只惩罚朝对照作者偏移);② 极小基准维度(如章回套语 0.01)绝对容差带,避免 norm 把 0 放大成缺口;③ 短文本(<3000字)密度型维度(文言/四字格)±100% 容差,因为短篇"之"字集中等密度波动天生比全集大。
- 判定阈值(三级):短篇(<3000字)贴近度 ≥ 0.25 即核心指纹达标;中篇(3000–10000字) ≥ 0.45;长篇/全集(>10000字) ≥ 0.70 为"高仿写像"。不要对短文本苛求 0.7,也不要对中篇直接套 0.7。
⚠️ 生成前必须先反问
不会写小说的人不知道动笔前要厘清什么。因此任何"以某风格写小说"的请求,
绝不能直接动笔——必须先跑题材简报反问,把模糊需求逼成可落笔的简报。
反问清单(9 题,2 必答 7 可选,见 scripts/brief_builder.py 的 QUESTIONS):
1. 【必答】主线:你想讲一个什么故事?(一句话)
2. 【必答】核心冲突:复仇 / 探秘 / 成长逆袭 / 势力存亡 / 正邪之争 / 爱情与道义两难 / 其他
3. 【可选】主角:身份 + 一个最鲜明特征
4. 【可选】对手/反派
5. 【可选】时代背景:架空背景(不写朝代)/ 古代 / 近代 / 现代 / 其他
6. 【可选】篇幅:开篇 / 一章 / 短篇 / 试笔
7. 【可选】基调:苍凉 / 热血 / 悬疑 / 幽默 / 悲壮 / 轻快
8. 【可选】必含元素:兵器 / 场景 / 桥段
9. 【可选】禁忌:别血腥 / 别感情线 / 别现代词 / 别烂尾
AI 行为规范:在对话里接到"写小说"类请求时,先照上述清单逐题反问用户,
收集答案后调用 brief_builder.build_brief_from_answers 生成简报,再用
generate_with_style.brief_to_prompt 转成写作指令,最后才动笔;写完后回检。
CLI 用法:
python scripts/brief_builder.py --emit-template # 打印反问清单(AI 照着问)
python scripts/generate_with_style.py --interview # 交互式反问→生成简报→给写作指令
python scripts/generate_with_style.py --brief brief.json # 用已有简报转写作指令
题材简报模板与字段说明见 references/题材简报模板.md。
⚠️ 合规声明
金庸、古龙等名家作品版权仍受保护(金庸约至 2068 年),本项目所有 TXT 均为非授权网络流传文本,分析仅供个人学习研究。本 SKILL 不得附带或引导获取受版权保护的全文;生成子模块仅用于"仿写练习/风格研究",产出为 AI 仿写,非原作者真品,不得冒充、商用或声称原作者所写。发布时须保留此声明。
生成后自动质检(--qa 全检·四道闸)
光"像不像"不够,还要"精不精、干不干净、对不对题"。在风格回检之外,
generate_with_style.py 增加 --qa 开关,跑四道闸全检,任一不过打回重写。
四道闸:
- 闸1 风格回检(已有):check_text 贴近度,三级门槛——短篇(<3000字)≥0.25 / 中篇(3000–10000字)≥0.45 / 长篇(>10000字)≥0.70。门槛由 _style_threshold() 按汉字数自动判定。
- 闸2 精品度评分(quality_checker.quality_score):6 子项加权——描写密度(打斗章放宽 desc_min=0.10)、对话占比、节奏张弛(段落长度CV)、句式多样性、相邻句重复率、章末钩子。总分≥0.60 放行(阈值可用 --qa-threshold 调)。
- 闸3 违规扫描(quality_checker.compliance_scan):政治敏感 / 色情 / 血腥过度 / 违禁引流硬违规命中即一票否决;现代词/违和词命中标记待修订(不强制 fail,但报告标红)。词典在 quality_checker.POLITICAL_TERMS 等常量,可编辑。
- 闸4 简报对齐(quality_checker.brief_alignment):核对 avoid(禁忌词/现代词)、must_have(必含元素关键词)、conflict/hook(主线呼应)。任一缺失即不通过。
用法:
# 对一篇成品跑四闸全检(可带 brief.json 做简报对齐)
python scripts/generate_with_style.py --style jy --check 剑冢灵主_第01章.txt --qa --brief brief.json
# 对草稿 txt 回检 + 全检
python scripts/generate_with_style.py --style jy --input 草稿.txt --qa --report
# 调高精品门槛(默认0.60)
python scripts/generate_with_style.py --style gu --check x.txt --qa --qa-threshold 0.70
报告字段:passed(总判)、gates(四闸各自 pass/value/threshold)、quality_detail(6子项明细)、compliance_hits(违规命中含位置与上下文)、brief_issues(简报问题项)。全部绿了才落盘。
验收样例:已对《剑冢灵主》第1—3章跑 --qa,四闸逻辑与报告格式验证通过(见工作区 qa验证_第01-03章.md)。
> 注:违规扫描为自动化辅助,命中后由人工最终裁决,不替代人工审核;现代词命中视作"需修订"提示而非硬性禁令。
示例产出
examples/金庸写作风格分析_终极版.htmlexamples/古龙写作风格分析_终极版.htmlexamples/小说风格分析方法学手册.htmlexamples/金庸风格特征_deep.json/古龙风格特征_deep.jsonexamples/维度区分力对比.jsonexamples/待确认判定结果.json