Files
skills-lottery-picker/novels/round3/check_story1_round1.py
T
2026-06-19 06:38:31 +00:00

104 lines
3.5 KiB
Python

# -*- coding: utf-8 -*-
"""第一轮自查:故事1全面质量扫描"""
import os, re
d = "/app/working/workspaces/default/novels/round3/01-越躺平越强"
rr = re.compile(r'[\u4e00-\u9fff]')
files = sorted([f for f in os.listdir(d) if f.endswith('.md') and f.startswith('第')])
all_text = ''
for f in files:
all_text += open(os.path.join(d, f), 'r', encoding='utf-8').read()
print("=" * 60)
print("第一轮自查:8项全面质量扫描")
print("=" * 60)
issues = []
print("\n[1/8] 章节完整性")
print(f" 总章节:{len(files)}/15")
for i, f in enumerate(files, 1):
ok = f'第{i:02d}' in f or f'第{i:03d}' in f
if not ok:
issues.append(f"章节编号异常: {f}")
print(f" ❌ {f}")
else:
print(f" ✅ {f}")
print("\n[2/8] 汉字字数检查")
min_cn, min_f = 99999, ""
for f in files:
c = open(os.path.join(d, f), 'r', encoding='utf-8').read()
cn = len(rr.findall(c))
if cn < min_cn:
min_cn, min_f = cn, f
status = "✅" if cn >= 1800 else "❌" if cn < 1500 else "⚠️"
print(f" {status} {f}: {cn}汉字")
if min_cn < 1800:
issues.append(f"最低字数不足: {min_f}({min_cn}汉字)")
print("\n[3/8] 敏感词检查")
for w in ['公司', '集团', '企业', '被裁', '裁员', '辞退', '倒闭', '破产', '负债', '讨薪', '罢工', '劳资']:
cnt = all_text.count(w)
if cnt > 0:
print(f" ⚠️ \"{w}\": {cnt}次")
issues.append(f"敏感词\"{w}\"出现{cnt}次")
else:
print(f" ✅ \"{w}\": 0次")
print("\n[4/8] AI味残留检查")
for w in ['燃点', '深吸一口气', '深吸了口气', '握紧', '攥紧', '不由得', '心头一', '暗暗',
'咬了咬牙', '捏了一把汗', '倒吸一口', '陷入了沉思', '嘴角上扬', '冷峻', '凝重']:
cnt = all_text.count(w)
if cnt > 0:
print(f" ⚠️ \"{w}\": {cnt}次")
issues.append(f"AI味词\"{w}\"出现{cnt}次")
else:
print(f" ✅ \"{w}\": 0次")
print("\n[5/8] 段落长度检查")
long_para = 0
for f in files:
c = open(os.path.join(d, f), 'r', encoding='utf-8').read()
paras = [p for p in c.split('\n\n') if len(p.strip()) > 0]
for p in paras:
cn = len(rr.findall(p))
if cn > 800:
long_para += 1
print(f" 超长段落(>800汉字): {long_para}处")
if long_para > 5:
issues.append(f"超长段落过多: {long_para}处")
print("\n[6/8] 标点规范检查")
for w in ['。。。', '!!', '??', '、、', ',,,', '...']:
cnt = all_text.count(w)
if cnt > 0:
print(f" ⚠️ \"{w}\": {cnt}次")
issues.append(f"不规范标点\"{w}\"出现{cnt}次")
else:
print(f" ✅ \"{w}\": 0次")
print("\n[7/8] 独立行'——'检查")
indent_lines = [l for l in all_text.split('\n') if l.strip() == '——']
print(f" 独立行'——': {len(indent_lines)}处")
if len(indent_lines) > 0:
issues.append(f"独立行'——'{len(indent_lines)}处")
print("\n[8/8] 对话比例估算")
dialog_chars = len(re.findall(r'「[^」]*」', all_text))
total_cn = len(rr.findall(all_text))
print(f" 对话汉字数: {dialog_chars}")
print(f" 总汉字数: {total_cn}")
ratio = dialog_chars / max(total_cn, 1)
print(f" 对话占比: {ratio:.1%}")
if ratio < 0.05:
issues.append(f"对话占比过低: {ratio:.1%}")
print("\n" + "=" * 60)
print(f"自查结果:共发现 {len(issues)} 个问题")
for i, issue in enumerate(issues, 1):
print(f" {i}. {issue}")
if not issues:
print(" ✅ 全部通过,无问题!")
print("=" * 60)