#!/usr/bin/env python3 """Benchmark 评估器 - 互动视频短剧选题""" import json import sys import re def evaluate(result_json, benchmark_file, testdata_dir): """评估选题结果""" try: result = json.loads(result_json) except: return { "score": 50, "dimensions": {}, "reason": "无法解析输出JSON" } scores = {} # D1: 题材适配度 (20%) # 检查是否有冲突性、情感张力、讨论空间 summary = result.get('summary', '') title = result.get('title', '') # 高冲突性特征:争吵、矛盾、冲突、出轨、离婚、分手 conflict_indicators = ['矛盾', '冲突', '争吵', '分歧', '对立'] has_conflict = any(word in summary or word in title for word in conflict_indicators) # 情感张力特征 emotion_words = ['崩溃', '愤怒', '无奈', '绝望', '爆发', '哭泣'] has_emotion = any(word in summary or word in title for word in emotion_words) if has_conflict and has_emotion: scores['D1'] = 90 elif has_conflict: scores['D1'] = 75 else: scores['D1'] = 55 # D2: 剧情潜力 (20%) # 检查是否有角色、场景、分支点 roles = result.get('roles', []) scenes = result.get('scenes', []) branch_points = result.get('branch_points', []) if len(roles) >= 2 and len(branch_points) >= 1: scores['D2'] = 90 elif len(roles) >= 2: scores['D2'] = 75 else: scores['D2'] = 55 # D3: 可演绎性 (15%) # 检查推荐形式是否合理 form = result.get('recommended_form', '') if form in ['对话形式', '对话形式为主', '对话+旁白混合']: scores['D3'] = 90 elif form in ['旁白形式', '旁白为主']: scores['D3'] = 70 else: scores['D3'] = 60 # D4: 受众广度 (15%) # 检查目标人群是否广泛 # 婆媳、职场类话题通常受众广泛 if '婆媳' in summary or '婆媳' in title or '家庭' in result.get('recommended_interactive', ''): scores['D4'] = 85 else: scores['D4'] = 70 # D5: 互动空间 (20%) # 检查分支设计 interactive = result.get('recommended_interactive', '') if interactive in ['AB选择', '投票PK', '多结局'] and len(branch_points) > 0: scores['D5'] = 90 elif interactive: scores['D5'] = 75 else: scores['D5'] = 50 # D6: 时效周期 (10%) # 婆媳是永恒话题 if '婆媳' in summary or '婆媳' in title or '家庭' in summary: scores['D6'] = 85 else: scores['D6'] = 70 # 计算总分 total = (scores['D1'] * 0.20 + scores['D2'] * 0.20 + scores['D3'] * 0.15 + scores['D4'] * 0.15 + scores['D5'] * 0.20 + scores['D6'] * 0.10) result = { "score": round(total, 2), "dimensions": scores, "breakdown": { "D1_题材适配度": f"{scores['D1']} × 20% = {scores['D1'] * 0.20:.1f}", "D2_剧情潜力": f"{scores['D2']} × 20% = {scores['D2'] * 0.20:.1f}", "D3_可演绎性": f"{scores['D3']} × 15% = {scores['D3'] * 0.15:.1f}", "D4_受众广度": f"{scores['D4']} × 15% = {scores['D4'] * 0.15:.1f}", "D5_互动空间": f"{scores['D5']} × 20% = {scores['D5'] * 0.20:.1f}", "D6_时效周期": f"{scores['D6']} × 10% = {scores['D6'] * 0.10:.1f}" }, "reason": "基于 benchmark_v1.md 6维度评估" } print(json.dumps(result, indent=2, ensure_ascii=False)) return result if __name__ == '__main__': result_file = '/tmp/result.json' with open(result_file, 'r') as f: result_json = f.read() evaluate(result_json, '', '')