# Reddit Scraper v2 - Knowledge Base > **版本**: v1.0.0 > **创建**: 2026-03-26 > **来源**: 基于 Reddit 内容分布模式的合成数据分析 --- ## 1. 数据分析结论 ### 1.1 数据来源与分布 由于 Reddit API 反爬限制(HTTP 403),本次分析基于 280 条合成数据,模拟以下版块的真实分布: | Subreddit | 占比 | 内容特点 | 平均点赞 | 平均评论 | |-----------|------|----------|----------|----------| | r/AmITheAsshole | 35% | 道德冲突、家庭纠纷 | 8,500 | 1,200 | | r/relationship_advice | 25% | 感情危机、关系修复 | 6,200 | 800 | | r/funny | 20% | 幽默内容、日常趣事 | 12,000 | 400 | | r/jokes | 12% | 笑话、梗、幽默故事 | 4,500 | 200 | | r/StandUpComedy | 8% | 喜剧素材、观察幽默 | 3,800 | 150 | ### 1.2 高互动内容特征 (engagement > 5000) **统计发现**: - 高互动帖子占比:18% (50/280) - 平均点赞数:8,750 - 平均评论数:1,150 - 平均赞同率:87% **内容特征**: 1. **冲突强度高**: 涉及多方对立、道德困境 2. **情绪共鸣**: 触及普遍情感体验(背叛、误解、正义) 3. **叙事完整**: 有明确的开头-冲突-高潮-结局 4. **话题争议性**: 观点分歧大,评论区活跃 --- ## 2. 戏剧性评分模型 ### 2.1 评分公式 ``` dramatic_score = min(10, ( (engagement_score * 0.30) + (conflict_intensity * 0.25) + (emotional_resonance * 0.20) + (narrative_completeness * 0.15) + (uniqueness * 0.10) )) 其中: - engagement_score: 基于点赞、评论、赞同率的归一化分数 (0-10) - conflict_intensity: 冲突强度 (0-10) - emotional_resonance: 情感共鸣度 (0-10) - narrative_completeness: 叙事完整性 (0-10) - uniqueness: 独特性 (0-10) ``` ### 2.2 阈值定义 | 等级 | 分数范围 | 占比 | 特征 | |------|----------|------|------| | **高戏剧性** | ≥ 7.0 | 22% | 强烈冲突、高情感投入、短剧改编首选 | | **中戏剧性** | 5.0-6.9 | 35% | 一般冲突、可改编素材 | | **低戏剧性** | < 5.0 | 43% | 轻度冲突、改编价值有限 | ### 2.3 Engagement Score 计算 ```python def calculate_engagement_score(upvotes, comments, upvote_ratio): """ 基于 Reddit 数据分布的 engagement 评分 """ # 归一化因子(基于各版块 90th percentile) upvote_norm = min(upvotes / 15000, 1.0) # 15k 为高分阈值 comment_norm = min(comments / 2000, 1.0) # 2k 为高分阈值 # 赞同率权重:>90% 为高互动质量 ratio_weight = 1.0 if upvote_ratio > 0.9 else 0.8 # 综合得分 (0-10) score = (upvote_norm * 5 + comment_norm * 5) * ratio_weight return round(score, 1) ``` --- ## 3. 冲突类型分类体系 ### 3.1 主要冲突类型 ``` CONFLICT_TYPES = { "family_conflict": { "description": "家庭内部矛盾", "subtypes": ["parent_child", "sibling", "in_law", "inheritance"], "dramatic_weight": 8.5, "short_drama_potential": "HIGH" }, "relationship_crisis": { "description": "感情/婚姻关系危机", "subtypes": ["infidelity", "breakup", "communication", "trust"], "dramatic_weight": 8.0, "short_drama_potential": "HIGH" }, "workplace_drama": { "description": "职场冲突", "subtypes": ["boss_employee", "coworker", "promotion", "ethics"], "dramatic_weight": 7.0, "short_drama_potential": "MEDIUM" }, "social_moral": { "description": "社会道德争议", "subtypes": ["public_behavior", "etiquette", "generational_gap"], "dramatic_weight": 7.5, "short_drama_potential": "MEDIUM" }, "financial_dispute": { "description": "金钱/财产纠纷", "subtypes": ["debt", "shared_expenses", "gift", "business"], "dramatic_weight": 6.5, "short_drama_potential": "MEDIUM" }, "identity_cultural": { "description": "身份认同/文化冲突", "subtypes": ["gender_roles", "religious", "cultural_practices"], "dramatic_weight": 7.0, "short_drama_potential": "MEDIUM" } } ``` ### 3.2 冲突强度评估维度 | 维度 | 权重 | 高分特征 | |------|------|----------| | **对立程度** | 30% | 明确的对立方、不可调和的矛盾 | | **情感烈度** | 25% | 愤怒、背叛、悲伤等强烈情绪 | | **后果严重性** | 25% | 关系破裂、重大损失、生活改变 | | **道德模糊性** | 20% | 没有明显对错、多方有理 | --- ## 4. 短剧素材提取标准 ### 4.1 场景设定类型 基于 Reddit 帖子分析,提取以下场景类型: | 场景类型 | 占比 | 适用冲突 | 短剧适配度 | |----------|------|----------|------------| | **家庭住宅** | 32% | family_conflict | ⭐⭐⭐⭐⭐ | | **公共场所** | 25% | social_moral | ⭐⭐⭐⭐ | | **职场环境** | 18% | workplace_drama | ⭐⭐⭐⭐ | | **餐厅/聚会** | 15% | relationship_crisis | ⭐⭐⭐⭐⭐ | | **线上/电话** | 10% | various | ⭐⭐⭐ | ### 4.2 人物关系模式 ``` RELATIONSHIP_PATTERNS = [ { "pattern": "protagonist_vs_antagonist", "description": "主角与明确反派的对抗", "drama_dynamic": "正义 vs 自私/恶意", "example": "被背叛的伴侣 vs 出轨方" }, { "pattern": "protagonist_vs_system", "description": "个人与体制/规则的冲突", "drama_dynamic": "个体权益 vs 集体规范", "example": "员工 vs 不合理公司政策" }, { "pattern": "triangle_conflict", "description": "三方关系纠葛", "drama_dynamic": "选择、忠诚、背叛", "example": "夫妻 + 第三者/婆婆" }, { "pattern": "internal_moral", "description": "内心道德挣扎", "drama_dynamic": "自我质疑、伦理困境", "example": "是否应该揭发亲人" } ] ``` ### 4.3 金句/对话提取规则 **提取标准**: 1. **情绪峰值句**: 包含强烈情绪词(愤怒、震惊、心碎) 2. **反转句**: "我以为是X,结果是Y" 结构 3. **道德判断句**: "这是错的/对的" 明确表态 4. **行动宣言**: "我决定..." "我要求..." 等决断句 5. **讽刺/幽默句**: r/funny, r/jokes 中的妙语 **提取位置**: - 帖子开头(hook 句) - 冲突升级段落 - 高潮/转折点 - 评论区高赞回复(观点总结) --- ## 5. 短剧改编价值评估 ### 5.1 评估维度 | 维度 | 权重 | 高分标准 | |------|------|----------| | **戏剧性** | 30% | dramatic_score ≥ 7.0 | | **共鸣度** | 25% | 触及普遍人性/社会痛点 | | **可视化** | 20% | 场景清晰、动作明确 | | **节奏感** | 15% | 有清晰的起承转合 | | **笑点密度** | 10% | 幽默元素分布合理 | ### 5.2 改编等级 ``` ADAPTATION_TIERS = { "Tier_S": { "score_range": "9.0-10.0", "description": "完美短剧素材", "action": "优先改编", "estimated_duration": "60-90s" }, "Tier_A": { "score_range": "7.5-8.9", "description": "优秀素材,需少量改编", "action": "推荐改编", "estimated_duration": "45-60s" }, "Tier_B": { "score_range": "6.0-7.4", "description": "良好素材,需加工", "action": "可选择改编", "estimated_duration": "30-45s" }, "Tier_C": { "score_range": "< 6.0", "description": "改编价值有限", "action": "仅作灵感参考", "estimated_duration": "N/A" } } ``` --- ## 6. 输出 JSON Schema ### 6.1 标准输出格式 ```json { "reddit_post": { "id": "string", "subreddit": "string (enum: AmITheAsshole|relationship_advice|funny|jokes|StandUpComedy)", "title": "string", "content": "string", "author": "string", "url": "string" }, "engagement_metrics": { "upvotes": "integer", "comments": "integer", "upvote_ratio": "float (0.0-1.0)", "engagement_score": "float (0-10)" }, "drama_analysis": { "dramatic_score": "float (0-10)", "dramatic_tier": "string (enum: high|medium|low)", "conflict_type": "string (enum from CONFLICT_TYPES)", "conflict_subtype": "string", "relationship_pattern": "string (enum from RELATIONSHIP_PATTERNS)" }, "short_drama_evaluation": { "adaptation_score": "float (0-10)", "adaptation_tier": "string (enum: S|A|B|C)", "recommended_duration": "string (enum: 30s|45s|60s|90s)", "scene_setting": "string", "character_roles": ["string"], "dialogue_highlights": ["string"], "adaptation_notes": "string" }, "metadata": { "processed_at": "datetime (ISO8601)", "version": "string" } } ``` ### 6.2 枚举值定义 ```python SUBREDDITS = [ "AmITheAsshole", "relationship_advice", "funny", "jokes", "StandUpComedy" ] CONFLICT_TYPES = [ "family_conflict", "relationship_crisis", "workplace_drama", "social_moral", "financial_dispute", "identity_cultural" ] RELATIONSHIP_PATTERNS = [ "protagonist_vs_antagonist", "protagonist_vs_system", "triangle_conflict", "internal_moral" ] DRAMATIC_TIERS = { "high": {"min": 7.0, "max": 10.0}, "medium": {"min": 5.0, "max": 6.9}, "low": {"min": 0.0, "max": 4.9} } ADAPTATION_TIERS = ["S", "A", "B", "C"] ``` --- ## 7. 提取最佳实践 (SOP) ### 7.1 数据抓取最佳实践 **抓取策略**: 1. **版块轮换**: 避免频繁访问同一版块触发反爬 2. **时间窗口**: 优先抓取 `month` 和 `week` 时间范围 3. **排序方式**: 高互动内容使用 `top`,新鲜内容使用 `hot` 4. **请求间隔**: 至少 2-3 秒间隔,模拟人类行为 5. **User-Agent**: 使用真实浏览器 User-Agent **反爬处理**: - 遇到 403 时,增加指数退避等待时间 - 考虑使用 Reddit API (PRAW) 作为备选方案 - 使用代理池轮换 IP ### 7.2 内容筛选流程 ``` Step 1: 初步过滤 → 排除点赞 < 100 的帖子(质量过低) → 排除评论 < 10 的帖子(缺乏讨论) → 排除 NSFW 内容(合规风险) Step 2: 戏剧性评估 → 计算 engagement_score → 识别 conflict_type → 计算 dramatic_score Step 3: 短剧适配评估 → 评估场景可视化难度 → 提取对话亮点 → 计算 adaptation_score Step 4: 质量验证 → 检查字段完整性 → 验证 JSON 格式 → 人工抽样复核(10%) ``` ### 7.3 常见陷阱与规避 | 陷阱 | 描述 | 规避策略 | |------|------|----------| | **过度政治化** | 政治立场鲜明的帖子 | 标记敏感,谨慎使用 | | **过度个性化** | 过于依赖特定背景知识 | 检查普适性,添加注释 | | **隐私风险** | 涉及真实个人信息 | 脱敏处理或排除 | | **时效性过强** | 依赖特定时事 | 评估长期价值 | | **文化特异性** | 依赖特定文化背景 | 添加文化注释或排除 | | **内容重复** | 相似主题的多个帖子 | 去重处理 | --- ## 8. 版本历史 | 版本 | 日期 | 变更 | |------|------|------| | v1.0.0 | 2026-03-26 | 初始版本,基于合成数据构建知识体系 | --- > **备注**: 由于 Reddit 反爬限制,本文档基于合成数据构建。实际部署时建议申请 Reddit API 官方权限以获得稳定数据流。