novel-doomsday-resurgence/scripts/auto_fix_chapter1.py

301 lines
10 KiB
Python
Raw 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
"""
第1章自动修复脚本
专门针对第1章的问题进行修复
"""
import os
import re
import sys
def load_chapter(filepath):
"""加载章节内容"""
with open(filepath, 'r', encoding='utf-8') as f:
return f.read()
def save_chapter(filepath, content):
"""保存章节内容"""
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
def merge_short_paragraphs(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 add_golden_points(content):
"""增加爽点"""
# 第1章需要的爽点
golden_points = [
# 1. 明确重生优势
"重生!这不是梦,是第二次机会。",
# 2. 建立时间紧迫感
"六天,只有六天时间。六天后'稳盈宝'爆雷,八天后被扫地出门。",
# 3. 展现先知优势
"他知道未来会发生什么。极寒末世,文明断层,但更重要的是,他知道哪些机会可以抓住。",
# 4. 设置第一个目标
"第一个目标:用'稳盈宝'爆雷的消息,从周世昌那里换到启动资金。",
# 5. 建立情绪释放点
"陈末握紧拳头,眼中闪过一丝狠厉。这一次,他不会再任人宰割。"
]
# 在合适的位置插入爽点
lines = content.split('\n')
result = []
inserted_count = 0
for line in lines:
result.append(line)
# 在关键位置插入爽点
if inserted_count < len(golden_points):
if "重生后的第一场豪赌" in line and inserted_count == 0:
result.append(golden_points[0])
inserted_count += 1
elif "时间,比任何人想象的都要紧迫" in line and inserted_count == 1:
result.append(golden_points[1])
inserted_count += 1
elif "他知道这步棋的风险" in line and inserted_count == 2:
result.append(golden_points[2])
inserted_count += 1
elif "第一步,找到周世昌" in line and inserted_count == 3:
result.append(golden_points[3])
inserted_count += 1
elif "重生后的第一场豪赌,开始了" in line and inserted_count == 4:
result.append(golden_points[4])
inserted_count += 1
# 如果没找到插入点,在结尾添加
if inserted_count < 3:
result.append("\n" + "\n".join(golden_points[inserted_count:3]))
return '\n'.join(result)
def add_dialogue(content):
"""增加对话"""
# 第1章可以增加的对话
dialogues = [
# 房东王姐的电话对话
"电话接通,房东王姐不耐烦的声音传来:'小陈,房租到底什么时候交?这周五是最后期限,不然我真要清房了。'",
"陈末深吸一口气,声音平静:'王姐,周五之前我一定交。再给我几天时间。'",
"'几天?我都给你宽限多久了?'王姐的声音提高,'这次说到做到,周五见不到钱,你的东西全扔出去!'",
"电话挂断,忙音在耳边回响。陈末放下手机,眼神冰冷。",
# 内心独白(可以处理为对话形式)
"一个声音在心底响起:'陈末,你只有这一次机会。抓住它,或者重蹈覆辙。'",
"他握紧拳头,低声自语:'这一次,我不会输。'"
]
# 寻找插入对话的位置
lines = content.split('\n')
result = []
for line in lines:
result.append(line)
# 在房东王姐相关的位置插入对话
if "房东王姐的短信" in line:
result.append("") # 空行
result.append(dialogues[0])
result.append(dialogues[1])
result.append(dialogues[2])
result.append(dialogues[3])
# 在关键决策点插入内心独白
elif "重生后的第一场豪赌,开始了" in line:
result.append("") # 空行
result.append(dialogues[4])
result.append(dialogues[5])
return '\n'.join(result)
def enhance_emotional_arc(content):
"""增强情绪弧线"""
# 情绪变化的关键点
emotional_beats = [
# 1. 开篇:迷茫、恐惧
"冷。不仅是身体的冷,更是从心底蔓延出来的寒意。那些记忆,那些死亡,是真的吗?",
# 2. 确认重生:震惊、混乱
"镜子里的脸年轻,眼神却沧桑。两种时间在身体里冲撞,撕裂感让他几乎站立不稳。",
# 3. 清算现状:绝望、压力
"十五万的债务,八天后的流落街头。数字像巨石压在胸口,呼吸都变得困难。",
# 4. 制定计划:冷静、决绝
"恐惧慢慢沉淀,转化为冰冷的计算。如果那些记忆是真的,那么眼前的困境,不过是一场游戏的开始。",
# 5. 决定行动:坚定、孤注一掷
"眼神从迷茫转为锐利。这一次,他要做执棋者,而不是棋子。"
]
lines = content.split('\n')
result = []
inserted = 0
for i, line in enumerate(lines):
result.append(line)
# 在情绪转折点插入描述
if inserted < len(emotional_beats):
if "不是梦" in line and inserted == 0:
result.append(emotional_beats[0])
inserted += 1
elif "镜子里的人" in line and inserted == 1:
result.append(emotional_beats[1])
inserted += 1
elif "接近十五万" in line and inserted == 2:
result.append(emotional_beats[2])
inserted += 1
elif "如果那些记忆是真的" in line and inserted == 3:
result.append(emotional_beats[3])
inserted += 1
elif "重生后的第一场豪赌" in line and inserted == 4:
result.append(emotional_beats[4])
inserted += 1
return '\n'.join(result)
def fix_common_issues(content):
"""修复常见问题"""
# 1. 替换破折号
content = content.replace('——', '')
# 2. 修复对话格式
content = re.sub(r'["]([^"]+)["]', r'\1」', content)
# 3. 减少短句堆砌
lines = content.split('\n')
result = []
for line in lines:
stripped = line.strip()
if stripped and len(stripped) < 10 and not stripped.endswith(('', '', '', '')):
# 短句,尝试与下一句合并
continue
else:
result.append(line)
return '\n'.join(result)
def main():
"""主函数"""
if len(sys.argv) < 2:
print("用法python auto_fix_chapter1.py <章节文件路径> [输出文件路径]")
sys.exit(1)
input_file = sys.argv[1]
output_file = sys.argv[2] if len(sys.argv) > 2 else input_file.replace('.md', '_fixed.md')
if not os.path.exists(input_file):
print(f"错误:文件不存在 - {input_file}")
sys.exit(1)
print(f"开始修复第1章{input_file}")
# 加载内容
content = load_chapter(input_file)
original_length = len(content)
print(f"原始内容长度:{original_length} 字符")
# 执行修复步骤
print("1. 合并短段落...")
content = merge_short_paragraphs(content)
print("2. 增加爽点...")
content = add_golden_points(content)
print("3. 增加对话...")
content = add_dialogue(content)
print("4. 增强情绪弧线...")
content = enhance_emotional_arc(content)
print("5. 修复常见问题...")
content = fix_common_issues(content)
# 保存结果
save_chapter(output_file, content)
new_length = len(content)
print(f"修复完成!")
print(f"输出文件:{output_file}")
print(f"新内容长度:{new_length} 字符")
print(f"长度变化:{new_length - original_length} 字符")
# 生成修复报告
report = {
"original_file": input_file,
"fixed_file": output_file,
"length_change": new_length - original_length,
"fixes_applied": [
"合并短段落",
"增加爽点",
"增加对话",
"增强情绪弧线",
"修复常见问题"
],
"next_steps": [
"运行质量检查确认修复效果",
"重新提交 inkos 审核",
"监控后续章节质量"
]
}
report_file = output_file.replace('.md', '_report.json')
import json
with open(report_file, 'w', encoding='utf-8') as f:
json.dump(report, f, ensure_ascii=False, indent=2)
print(f"修复报告:{report_file}")
if __name__ == "__main__":
main()