Files
2026-06-19 06:38:31 +00:00

67 lines
2.6 KiB
Python

import os, re
dir_path = '/app/working/workspaces/default/novels/r2-ai-xiu-jiao'
files = sorted(
[f for f in os.listdir(dir_path) if f.endswith('.md') and f != 'README.md'],
key=lambda x: int(re.search(r'第(\d+)章', x).group(1)) if re.search(r'第(\d+)章', x) else 99
)
all_text = ''.join(open(os.path.join(dir_path, f)).read() for f in files)
sizes = [len(open(os.path.join(dir_path, f)).read().encode('utf-8')) for f in files]
hz = len(re.findall(r'[\u4e00-\u9fff]', all_text))
print('=' * 60)
print('《AI能代替一切,除了修脚》- 完整度检查')
print('=' * 60)
print(f'15章完整: {"OK" if len(files) == 15 else "ISSUE: " + str(len(files))}')
print(f'汉字:~{hz} | 均:{sum(sizes)//15}b | 最短:{min(sizes)}b | 最长:{max(sizes)}b')
print()
print('--- 审核敏感词扫描 ---')
for w in ['公司', '集团', '企业']:
count = len(re.findall(w, all_text))
print(f' "{w}": {count}处 {"✅" if count == 0 else "⚠️"}')
for w in ['被裁', '裁员', '辞退', '被优化', '被替代', '被代替']:
count = len(re.findall(w, all_text))
print(f' "{w}": {count}处 {"✅" if count == 0 else "⚠️"}')
print()
print('--- 章节开头模式检查 ---')
for f in files[:3]:
lines = open(os.path.join(dir_path, f)).read().strip().split('\n')
for l in lines:
s = l.strip()
if s and not s.startswith('# ') and len(s) > 5:
print(f' {f[:15]}: {s[:60]}')
break
print()
print('--- AI味残留扫描 ---')
patterns = {
'燃点标签': r'燃点|【燃|(燃',
'章末标注': r'第[一二三四五六七八九十百]+章.*完',
'深吸一口气': r'深吸一口气|深呼一口气',
'握紧/攥紧': r'握紧|攥紧|捏紧',
'——独立行': r'^\s*——+\s*$',
'meta自嘲': r'不对.*系统|这不是.*小说|作者注',
'全书完': r'(全书完)|(全文完)',
}
for name, pat in patterns.items():
count = len(re.findall(pat, all_text, re.MULTILINE))
flag = '⚠️' if count > 0 else '✅'
print(f' {name}: {flag} ({count}处)')
print()
print('--- 被动受害者叙事扫描 ---')
bei_pat = r'被[^。!?]{0,20}替代|被[^。!?]{0,20}代替|被[^。!?]{0,20}辞退|被[^。!?]{0,20}裁'
bei_count = len(re.findall(bei_pat, all_text))
print(f' 被动被XX叙事: {"✅ 0处" if bei_count == 0 else "⚠️ " + str(bei_count) + "处"}')
score = 100
if min(sizes) < 1200: score -= 10
if bei_count > 0: score -= bei_count * 10
print()
print(f'评分: {max(score, 0)}/100')
print(f'评级: {"S - 可直接投番茄" if score >= 90 else "A - 微调后可投"}')