---
name: 开源情报-社交媒体事件挖掘
description: 社交媒体事件挖掘与分析技能。分析目标账号（如马斯克）近一个月发布的所有推文，通过聚类算法识别独立事件，评估影响力、主题、情感和传播模式。使用场景：舆情监测、KOL行为分析、事件溯源、认知战研究。
---

# 社交媒体事件挖掘与分析

## 功能概述

本技能用于挖掘和分析社交媒体账号在指定时间范围内曝光的事件：

- **事件聚类识别** - 基于时间窗口和主题相似度聚类推文，识别独立事件
- **事件影响力评估** - 综合互动量、推文密度、原创比例计算影响力评分
- **事件主题分类** - 识别事件主题（产品发布、技术更新、商业动态、政治/政策等）
- **事件情感分析** - 分析事件内容的情感倾向（正面/负面/中性）
- **传播模式识别** - 判定是主动发声、混合传播、参与讨论还是被动传播
- **综合报告生成** - 生成Markdown格式的事件清单和详细分析报告

## 输入格式

### 账号信息（account_info）

```json
{
  "id": "elonmusk",
  "username": "Elon Musk",
  "bio": "Mars, cars, chips & rockets",
  "location": "Austin, Texas",
  "created_at": "2009-06-02",
  "followers_count": 150000000,
  "following_count": 100,
  "verified": true
}
```

### 推文数据（tweets）

```json
[
  {
    "id": "1",
    "text": "Exciting product launch coming soon! #product #launch",
    "created_at": "2026-04-01T10:00:00Z",
    "like_count": 10000,
    "retweet_count": 5000,
    "reply_count": 1000,
    "is_retweet_of": null  // 如果是转发，填被转发推文ID
  }
]
```

**必需字段：**
- `id`: 推文ID
- `text`: 推文内容
- `created_at`: 创建时间（ISO 8601格式）
- `like_count`: 点赞数
- `retweet_count`: 转发数
- `reply_count`: 回复数

**可选字段：**
- `is_retweet_of`: 被转发推文ID（用于区分原创和转发）
- `media_urls`: 媒体文件URL列表
- `quoted_tweet_id`: 引用推文ID

### 交互数据（interaction_data，可选）

```json
{
  "likes": [],
  "followers_sample": [],
  "key_tweet_interactions": {}
}
```

## 处理流程

### Step 1: 时间范围过滤
- 按指定天数（默认30天）过滤推文
- 支持灵活的时间范围设置

### Step 2: 事件聚类
- 基于时间窗口（默认48小时）和文本相似度聚类推文
- 支持话题标签重叠检测
- 支持转推/引用关系检测

### Step 3: 事件分析
- **影响力评估**: 综合互动量、推文数量、推文密度、原创比例
- **主题分类**: 基于关键词和话题标签识别主题
- **情感分析**: 分析情感倾向（简化版词典方法）
- **传播模式**: 判定主动/被动、原创/转发比例

### Step 4: 报告生成
- 生成事件清单（按时间或影响力排序）
- 生成每个事件的详细分析报告
- 生成汇总统计信息

## 输出格式

### Markdown报告

```
# 社交媒体事件挖掘分析报告

**生成时间：** 2026-04-02 21:14:14

**目标账号：**
- 账号ID：elonmusk
- 用户名：Elon Musk
- 粉丝数：150,000,000

**分析范围：** 近30天

## 统计摘要

- **识别事件数：** 2
- **分析推文数：** 6
- **总互动量：** 104,800

## 事件清单（按影响力排序）

| 事件ID | 时间范围 | 推文数 | 互动量 | 影响力等级 | 主题 |
|--------|----------|--------|--------|------------|------|
| 1. event_1 | 2026-04-01 | 3 | 68,500 | 中 | 产品发布 |

## 详细事件分析

## 事件：event_1

**时间范围：** 2026-04-01 10:00:00 - 2026-04-01 12:00:00
（持续 2.0 小时）

**影响力评估：**
- **评分：342.68**
- **等级：中**

**主题分类：**
- **主要主题：产品发布**
- **置信度：** 1.0

**传播模式：**
- **模式：主动发声**
- **描述：** 以原创内容为主，主动发起话题和讨论
```

### JSON结构化数据

完整结果包含：

```json
{
  "account_info": {},
  "events": [
    {
      "id": "event_1",
      "tweets": [],
      "analysis": {
        "influence": {},
        "topic": {},
        "sentiment": {},
        "propagation_pattern": {}
      }
    }
  ],
  "report": "markdown报告内容",
  "summary": {
    "time_range_days": 30,
    "total_tweets_analyzed": 6,
    "events_identified": 2,
    "total_engagement": 104800
  },
  "parameters": {
    "time_window_hours": 48.0,
    "min_tweets_per_event": 3,
    "days_back": 30
  }
}
```

## 使用方法

### 方法1：命令行

```bash
cd /root/.openclaw/workspace/skills/social-media-event-miner

# 使用示例数据
python3 scripts/mine_events.py

# 使用自定义数据
python3 scripts/mine_events.py references/test-input.json
```

### 方法2：Python代码

```python
import json
import sys
from pathlib import Path

sys.path.insert(0, "/root/.openclaw/workspace/skills/social-media-event-miner/scripts")
from mine_events import mine_social_media_events

# 加载数据
with open("input.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# 执行挖掘
result = mine_social_media_events(
    account_info=data["account_info"],
    tweets=data["tweets"],
    interaction_data=data.get("interaction_data"),
    time_window_hours=48.0,
    min_tweets_per_event=3,
    days_back=30
)

# 输出报告
print(result["report"])

# 输出完整JSON
# print(json.dumps(result, ensure_ascii=False, indent=2, default=str))
```

### 方法3：单独使用各模块

**仅聚类事件：**
```python
from event_clusterer import cluster_tweets_into_events

events = cluster_tweets_into_events(tweets, time_window_hours=48.0)
```

**仅分析事件：**
```python
from event_analyzer import analyze_event_comprehensive

analysis = analyze_event_comprehensive(event)
```

## 核心脚本

| 脚本 | 功能 |
|------|------|
| `mine_events.py` | 主入口：完整挖掘流程 |
| `event_clusterer.py` | 事件聚类模块 |
| `event_analyzer.py` | 事件分析模块 |
| `generate_report.py` | 报告生成模块 |

## 参数说明

### 主要参数

- **time_window_hours** (float, 默认48.0)
  - 时间窗口（小时），用于判定推文是否属于同一事件
  - 值越大，事件越容易合并；更小，事件更细粒度

- **min_tweets_per_event** (int, 默认3)
  - 每个事件最少需要的推文数
  - 少于此数的推文不会被识别为独立事件

- **days_back** (int, 默认30)
  - 分析时间范围（天数）
  - 默认分析近30天的推文

## 主题分类体系

内置主题分类：

| 主题 | 关键词示例 |
|------|------------|
| 产品发布 | launch, release, product, announce |
| 技术更新 | update, upgrade, feature, improve |
| 商业动态 | deal, acquisition, investment, stock |
| 政治/政策 | policy, regulation, government, law |
| 社会议题 | social, community, humanitarian |
| 个人观点 | think, believe, opinion, view |
| 争议/冲突 | dispute, conflict, criticize |
| 娱乐/文化 | entertainment, culture, art, music |

## 影响力等级

| 评分 | 等级 | 说明 |
|------|------|------|
| ≥1000 | 极高 | 超级热点事件 |
| ≥500 | 高 | 重大事件 |
| ≥100 | 中 | 中等事件 |
| <100 | 低 | 一般事件 |

## 传播模式

| 模式 | 原创比例 | 说明 |
|------|----------|------|
| 主动发声 | ≥80% | 以原创内容为主，主动发起话题 |
| 混合传播 | 50%-80% | 原创与转发并重 |
| 参与讨论 | 20%-50% | 以转发和引用为主 |
| 被动传播 | <20% | 几乎全是转发 |

## 注意事项

1. **数据质量依赖**：分析结果高度依赖推文时间戳的准确性和互动数据完整性
2. **主题分类简化**：当前使用关键词匹配，实际应用中建议使用NLP模型（如BERT）
3. **情感分析简化**：当前使用词典方法，实际应用中建议使用情感分析模型
4. **时间窗口调整**：根据具体账号的推文频率调整 `time_window_hours` 参数
5. **语言支持**：当前主要支持英文，中文主题分类需要扩展关键词库

## 应用场景

- **KOL行为分析** - 分析意见领袖的发声模式和关注重点
- **舆情监测** - 追踪热点事件的传播和演化
- **事件溯源** - 识别事件的第一手来源和关键节点
- **认知战研究** - 分析敌对叙事的传播模式和影响力
- **竞品分析** - 监控竞争对手的战略动向和市场活动
- **个人品牌管理** - 追踪个人或品牌的社交媒体影响力

## 扩展和定制

### 添加新主题

编辑 `scripts/event_analyzer.py`，在 `topic_keywords` 中添加：

```python
topic_keywords = {
    # ... 现有主题 ...
    "新主题": ["keyword1", "keyword2", "keyword3"],
}
```

### 扩展情感词典

编辑 `scripts/event_analyzer.py`，在 `positive_words` 和 `negative_words` 中添加：

```python
positive_words = [
    # ... 现有词汇 ...
    "positive_word1", "positive_word2",
]
```

### 使用NLP模型替代简化方法

在 `classify_event_topic()` 和 `analyze_event_sentiment()` 函数中集成BERT等NLP模型：
```python
from transformers import pipeline

classifier = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
result = classifier(text, candidate_labels=["产品", "技术", "商业"])
```

## 技术支持

如遇问题，检查：
1. 输入数据格式是否正确（特别是时间戳格式）
2. 推文数量是否足够（至少需要 `min_tweets_per_event` 条才能识别事件）
3. 时间窗口设置是否合理（与推文频率匹配）

---

## 🔴 强制遵守：报告通用铁律

本技能输出的所有报告必须严格遵守 **[《报告通用铁律 v1.0》](../_shared/报告通用铁律.md)**（长官审定）。

**核心认知：** 报告的内容和大纲千差万别，但格式标准是同一套。本技能仅负责"内容差异"，不允许偏离铁律规定的通用要求。

### 七条铁律速览

| # | 铁律 | 核心 |
|---|------|------|
| 1 | **真实可溯源** | 绝不编造；URL 必须 HTTP 200；2-3 源交叉印证 |
| 2 | **政治立场正确** | 中国国家利益至上；台湾是中国省份；坚持党的领导 |
| 3 | **公文格式标准化** | 主标题 2 号小标宋居中；章节 3 号黑体左对齐；正文 3 号仿宋首行缩进 2 字符 |
| 4 | **全文格式统一** | 所有章节段落格式必须完全一致；第四/五章不允许格式割裂 |
| 5 | **正文洁净** | 禁元工作流痕迹、禁工具元数据、禁骨架装饰、禁 markdown 残留、禁空小节 |
| 6 | **文件命名与主标题规范** | 文件名 `报告主题.docx`；**文件名和主标题均不得包含日期前缀** |
| 7 | **出厂校验机制** | 下发前必跑 `pre_release_gate.py`；不通过禁止下发 |

### 出厂前必跑

```bash
/root/miniconda3/envs/data-collector/bin/python \
    /root/.openclaw/workspace/skills/_shared/pre_release_gate.py \
    <报告docx路径>
```

**任何违反铁律的报告视为不合格，必须修复后重新下发。**
