Initial commit: yu-zhi-ran platform with automation integration
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
批量合规审查脚本
|
||||
遍历指定日期所有发布版本,执行合规检查,生成汇总报告
|
||||
"""
|
||||
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
import sys
|
||||
|
||||
PROJECT_ROOT = Path(__file__).parent.parent
|
||||
sys.path.insert(0, str(PROJECT_ROOT))
|
||||
from scripts.compliance_checker import check_article
|
||||
|
||||
# 配置
|
||||
RELEASE_DIR = PROJECT_ROOT / "automation" / "data" / "releases"
|
||||
TOPICS_FILE = PROJECT_ROOT / "automation" / "data" / "sustainability_topics.json"
|
||||
TODAY = "2026-04-16" # 可参数化
|
||||
|
||||
def load_topics():
|
||||
with open(TOPICS_FILE, 'r', encoding='utf-8') as f:
|
||||
return json.load(f)
|
||||
|
||||
def extract_topic_id(filename: str) -> str:
|
||||
"""从文件名提取 topic ID,如 zhihu_A01_zhihu.html -> A01"""
|
||||
parts = filename.stem.split('_')
|
||||
if len(parts) >= 2:
|
||||
return parts[1]
|
||||
return None
|
||||
|
||||
def main():
|
||||
topics = load_topics()
|
||||
topics_by_id = {t['id']: t for t in topics}
|
||||
|
||||
release_path = RELEASE_DIR / TODAY
|
||||
if not release_path.exists():
|
||||
print(f"错误:发布日期目录不存在 {release_path}")
|
||||
return
|
||||
|
||||
html_files = list(release_path.rglob("*.html"))
|
||||
print(f"找到 {len(html_files)} 个HTML文件,开始合规审查...\n")
|
||||
|
||||
results = []
|
||||
for html_file in html_files:
|
||||
platform = html_file.parent.name
|
||||
topic_id = extract_topic_id(html_file)
|
||||
topic_data = topics_by_id.get(topic_id) if topic_id else None
|
||||
|
||||
# 读取HTML
|
||||
with open(html_file, 'r', encoding='utf-8') as f:
|
||||
html_content = f.read()
|
||||
|
||||
# 执行合规检查
|
||||
result = check_article(html_content, platform, topic_data)
|
||||
result['file'] = str(html_file.relative_to(PROJECT_ROOT))
|
||||
result['platform'] = platform
|
||||
result['topic_id'] = topic_id
|
||||
result['topic_title'] = topic_data.get('title') if topic_data else "未知"
|
||||
results.append(result)
|
||||
|
||||
status = "✅ PASS" if result['passed'] else "❌ FAIL"
|
||||
print(f"{status} {topic_id} {platform:12} {result['topic_title'][:30]:30} 问题数: {len(result['issues'])} 得分: {result['score']}")
|
||||
|
||||
# 汇总报告
|
||||
passed = sum(1 for r in results if r['passed'])
|
||||
failed = len(results) - passed
|
||||
avg_score = sum(r['score'] for r in results) / len(results) if results else 0
|
||||
|
||||
print(f"\n========== 合规审查汇总 ==========")
|
||||
print(f"总计: {len(results)} 篇")
|
||||
print(f"通过: {passed} 篇")
|
||||
print(f"失败: {failed} 篇")
|
||||
print(f"平均分: {avg_score:.1f}")
|
||||
|
||||
# 保存详细报告
|
||||
report = {
|
||||
"date": TODAY,
|
||||
"summary": {
|
||||
"total": len(results),
|
||||
"passed": passed,
|
||||
"failed": failed,
|
||||
"average_score": avg_score
|
||||
},
|
||||
"details": results
|
||||
}
|
||||
report_file = PROJECT_ROOT / "automation" / "data" / "drafts" / TODAY / "compliance_summary.json"
|
||||
report_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(report_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(report, f, ensure_ascii=False, indent=2)
|
||||
print(f"\n📁 详细报告已保存: {report_file}")
|
||||
|
||||
# 列出失败项
|
||||
if failed > 0:
|
||||
print("\n⚠️ 需要修复的文章:")
|
||||
for r in results:
|
||||
if not r['passed']:
|
||||
print(f" {r['file']}")
|
||||
for issue in r['issues'][:3]: # 只显示前3个问题
|
||||
print(f" - {issue['type']}/{issue.get('category','')}: {issue.get('suggestion','')}")
|
||||
if len(r['issues']) > 3:
|
||||
print(f" ... 等共{len(r['issues'])}个问题")
|
||||
else:
|
||||
print("\n🎉 所有文章均通过合规审查!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user