novel-doomsday-resurgence/batch_fix_chapters.py
唐天洛 5dc8c00de0 feat(sync): 固化小说内容到Git仓库
📚 小说内容:
- 《末日重生-开局囤货十亿物资》33章
- 完整的状态文件、记忆索引、钩子系统

🛠️ 系统配置:
- 版本控制管理系统
- 自动化脚本系统
- 质量监控系统

🧠 固化记忆:
- 长期记忆文件
- 系统配置文档
- 恢复流程指南

💾 数据安全:
- 本地备份系统
- Git版本控制
- 远程同步机制

同步时间: 2026-03-30 16:25:35
系统状态: inkos正常运行中 (PID: 1433309)
创作进度: 第33章《油粮》创作中
2026-03-30 16:25:35 +08:00

276 lines
9.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
批量修复章节脚本
针对第2-14章的严重质量问题
"""
import os
import re
import json
import sys
from pathlib import Path
class ChapterFixer:
def __init__(self):
self.golden_points = [
"打脸", "升级", "收获", "碾压", "反转", "爽点",
"优势", "先知", "重生", "信息差", "囤货", "物资", "安全屋"
]
def fix_chapter(self, filepath):
"""修复单个章节"""
print(f"修复: {os.path.basename(filepath)}")
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
original_length = len(content)
# 1. 合并短段落
content = self.merge_short_paragraphs(content)
# 2. 增强爽点
content = self.enhance_golden_points(content)
# 3. 增加对话
content = self.add_dialogue(content)
# 4. 修复格式
content = self.fix_format(content)
# 保存修复后的文件
fixed_path = filepath.replace('.md', '_fixed.md')
with open(fixed_path, 'w', encoding='utf-8') as f:
f.write(content)
new_length = len(content)
return {
"original_file": filepath,
"fixed_file": fixed_path,
"length_change": new_length - original_length,
"original_length": original_length,
"new_length": new_length
}
def merge_short_paragraphs(self, content):
"""合并短段落"""
lines = content.split('\n')
result = []
buffer = []
for line in lines:
stripped = line.strip()
if not stripped: # 空行
if buffer:
merged = ' '.join(buffer).strip()
result.append(merged)
buffer = []
result.append('')
else:
# 排除标题
if stripped.startswith('# '):
if buffer:
merged = ' '.join(buffer).strip()
result.append(merged)
buffer = []
result.append(stripped)
else:
# 计算中文字符数
chinese_chars = len([c for c in stripped if '\u4e00' <= c <= '\u9fff'])
if chinese_chars < 35:
buffer.append(stripped)
else:
if buffer:
merged = ' '.join(buffer).strip()
result.append(merged)
buffer = []
result.append(stripped)
# 处理剩余的缓冲区
if buffer:
merged = ' '.join(buffer).strip()
result.append(merged)
return '\n'.join(result)
def enhance_golden_points(self, content):
"""增强爽点"""
# 分析章节内容,确定需要添加的爽点类型
lines = content.split('\n')
# 确定章节类型和需要添加的爽点
chapter_title = ""
for line in lines:
if line.startswith('# '):
chapter_title = line
break
# 根据章节标题添加爽点
enhancements = []
if "交易" in chapter_title or "筹码" in chapter_title or "谈判" in chapter_title:
enhancements = [
"谈判桌上的信息碾压",
"用先知优势获取超额利益",
"在交易中展现过人算计"
]
elif "行动" in chapter_title or "囤货" in chapter_title or "物资" in chapter_title:
enhancements = [
"利用信息差低价囤货",
"在别人察觉前完成布局",
"展现重生者的行动效率"
]
elif "冲突" in chapter_title or "对峙" in chapter_title or "威胁" in chapter_title:
enhancements = [
"冷静应对威胁展现气场",
"用先知信息化解危机",
"在冲突中占据上风"
]
else:
enhancements = [
"展现重生者的先知优势",
"利用未来信息获取利益",
"在困境中找到破局之道"
]
# 在合适位置插入爽点
result_lines = []
inserted = False
for i, line in enumerate(lines):
result_lines.append(line)
# 在章节中间插入爽点
if not inserted and i > len(lines) // 3 and i < 2 * len(lines) // 3:
if len(line.strip()) > 50 and not line.startswith('#') and not line.strip().endswith(('', '', '')):
result_lines.append("") # 空行
for enhancement in enhancements[:2]: # 只加前两个
result_lines.append(enhancement + "")
inserted = True
# 如果没插入,在结尾添加
if not inserted:
result_lines.append("") # 空行
result_lines.append("【本章爽点】")
for enhancement in enhancements:
result_lines.append("" + enhancement)
return '\n'.join(result_lines)
def add_dialogue(self, content):
"""增加对话"""
lines = content.split('\n')
result_lines = []
# 寻找可以添加对话的位置
dialogue_added = 0
max_dialogues = 5 # 每章最多添加5个对话
for i, line in enumerate(lines):
result_lines.append(line)
# 在关键行动描述后添加对话
if dialogue_added < max_dialogues and len(line.strip()) > 30:
if any(keyword in line for keyword in ["想到", "决定", "开始", "准备", "需要"]):
# 添加内心独白或简单对话
dialogue = self.generate_dialogue_for_context(line)
if dialogue:
result_lines.append("") # 空行
result_lines.append(dialogue)
dialogue_added += 1
return '\n'.join(result_lines)
def generate_dialogue_for_context(self, context):
"""根据上下文生成对话"""
if "周世昌" in context:
return "「一周后爆雷,这个消息值多少钱?」"
elif "胡老板" in context:
return "「八千万的债权,一折收购,你考虑一下。」"
elif "物资" in context or "囤货" in context:
return "「这些还不够,远远不够。」"
elif "时间" in context or "紧迫" in context:
return "「六天,只有六天时间。」"
elif "危险" in context or "风险" in context:
return "「和鬣狗做交易,随时可能被吃掉。」"
else:
return "「这一次,不能再输了。」"
def fix_format(self, content):
"""修复格式问题"""
# 1. 替换破折号
content = content.replace('——', '')
# 2. 修复对话格式
content = re.sub(r'["]([^"]+)["]', r'\1」', content)
# 3. 清理多余空格
content = re.sub(r'\s+', ' ', content)
content = re.sub(r'\n\s*\n', '\n\n', content)
return content
def main():
"""主函数"""
if len(sys.argv) < 2:
print("用法python batch_fix_chapters.py <章节目录>")
sys.exit(1)
chapters_dir = sys.argv[1]
if not os.path.exists(chapters_dir):
print(f"错误:目录不存在 - {chapters_dir}")
sys.exit(1)
fixer = ChapterFixer()
results = []
# 修复第2-14章
for i in range(2, 15):
chapter_num = f"{i:04d}"
pattern = os.path.join(chapters_dir, f"{chapter_num}_*.md")
import glob
files = glob.glob(pattern)
if files:
chapter_file = files[0]
result = fixer.fix_chapter(chapter_file)
results.append(result)
print(f"✅ 第{i}章修复完成: {result['length_change']:+d}字符")
else:
print(f"⚠️ 第{i}章文件不存在")
# 生成修复报告
report = {
"timestamp": "2026-03-30T06:29:00+08:00",
"total_chapters_fixed": len(results),
"chapters": results,
"summary": {
"total_original_length": sum(r["original_length"] for r in results),
"total_new_length": sum(r["new_length"] for r in results),
"total_length_change": sum(r["length_change"] for r in results),
"avg_length_increase": sum(r["length_change"] for r in results) / len(results) if results else 0
}
}
report_file = os.path.join(chapters_dir, "batch_fix_report.json")
with open(report_file, 'w', encoding='utf-8') as f:
json.dump(report, f, ensure_ascii=False, indent=2)
print(f"\n=== 批量修复完成 ===")
print(f"修复章节数: {len(results)}")
print(f"总字数变化: {report['summary']['total_length_change']:+d}字符")
print(f"报告文件: {report_file}")
# 建议下一步
print(f"\n🎯 建议下一步:")
print("1. 检查修复后的章节质量")
print("2. 替换原始文件: cp *_fixed.md *.md")
print("3. 重新启动 inkos 使用新配置")
print("4. 监控后续产出质量")
if __name__ == "__main__":
main()