# -*- 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)