67 lines
2.6 KiB
Python
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 - 微调后可投"}')
|