# 数据处理模块

本模块提供数据提取和转换功能，用于处理小红书帖子的特征提取和分类映射。

## 目录结构

```
script/data_processing/
├── __init__.py                          # 模块初始化
├── README.md                             # 使用文档（本文件）
├── docs/                                 # 需求文档目录
│   ├── 1、获取标签->分类.md              # extract_feature_categories.py 的需求
│   ├── 2、获取标签->帖子.md              # extract_features_from_posts.py 的需求
│   └── 3、构造解构任务列表.md            # extract_current_posts.py 的需求
├── extract_feature_categories.py         # 特征分类映射提取脚本
├── extract_features_from_posts.py        # 特征帖子来源提取脚本
└── extract_current_posts.py              # 当前帖子解构任务列表提取脚本
```

## 脚本说明

### 1. extract_current_posts.py

从 `当前帖子_what解构结果` 目录中提取当前帖子的解构任务列表。

**需求文档：** [docs/3、构造解构任务列表.md](docs/3、构造解构任务列表.md)

**功能：**
- 从当前帖子的解构结果中提取灵感点、目的点、关键点
- 自动获取帖子详情（标题、正文、图片、点赞数等）
- 提取每个点的名称、描述和特征列表
- 生成统一格式的解构任务列表

**输入：**
- `data/data_1117/当前帖子_what解构结果/*.json` - 当前帖子的解构结果

**输出：**
- `data/data_1117/当前帖子_解构任务列表.json` - 当前帖子的解构任务列表

**使用方法：**
```bash
# 从项目根目录运行
python script/data_processing/extract_current_posts.py

# 或者从任意目录运行
python /path/to/script/data_processing/extract_current_posts.py
```

**输出格式：**
```json
{
    "解构任务列表": [
        {
            "帖子id": "690d977d0000000007036331",
            "帖子详情": {
                "title": "你不会无缘无故刷到的",
                "body_text": "...",
                "like_count": 123,
                "publish_time": "2025-11-07 15:08:59",
                ...
            },
            "what解构结果": {
                "灵感点列表": [
                    {
                        "名称": "发现立冬和教资查分是同一天",
                        "描述": "创作者在构思内容时...",
                        "特征列表": ["立冬", "教资查分", "时间巧合"]
                    }
                ],
                "目的点列表": [...],
                "关键点列表": [...]
            }
        }
    ]
}
```

---

### 2. extract_features_from_posts.py

从 `过去帖子_what解构结果` 目录中提取特征名称及其来源信息。

**需求文档：** [docs/2、获取标签->帖子.md](docs/2、获取标签->帖子.md)

**功能：**
- 从帖子的三点解构（灵感点、目的点、关键点）中提取特征
- 自动获取帖子详情（标题、正文、图片、点赞数等）
- 根据当前帖子的最早发布时间过滤数据，避免时间穿越
- 输出特征名称到帖子来源的映射关系

**输入：**
- `data/data_1117/过去帖子_what解构结果/*.json` - 过去帖子的解构结果
- `data/data_1117/当前帖子_what解构结果/*.json` - 当前帖子的解构结果（用于获取时间阈值）

**输出：**
- `data/data_1117/特征名称_帖子来源.json` - 特征名称及其帖子来源映射

**使用方法：**
```bash
# 从项目根目录运行
python script/data_processing/extract_features_from_posts.py

# 或者从任意目录运行
python /path/to/script/data_processing/extract_features_from_posts.py
```

**输出格式：**
```json
{
    "灵感点": [
        {
            "特征名称": "猫咪",
            "特征来源": [
                {
                    "点的名称": "猫咪照片拍出了专业模特感",
                    "点的描述": "...",
                    "帖子id": "69114f150000000007001f30",
                    "帖子详情": {
                        "title": "老师 我家孩子可以做童模吗",
                        "body_text": "...",
                        "like_count": 765,
                        "publish_time": "2025-11-10 10:33:58",
                        ...
                    }
                }
            ]
        }
    ],
    "目的点": [...],
    "关键点": [...]
}
```

---

### 3. extract_feature_categories.py

从 `过去帖子_pattern聚合结果.json` 中提取特征名称及其分类层级信息。

**需求文档：** [docs/1、获取标签->分类.md](docs/1、获取标签->分类.md)

**功能：**
- 提取特征名称到分类的映射关系
- 构建分类层级结构（包括层级深度、是否叶子节点、下一级节点等）
- 根据当前帖子的最早发布时间过滤数据
- 打印被过滤掉的帖子警告信息

**输入：**
- `data/data_1117/过去帖子_pattern聚合结果.json` - Pattern聚合结果
- `data/data_1117/当前帖子_what解构结果/*.json` - 当前帖子（用于获取时间阈值）

**输出：**
- `data/data_1117/特征名称_分类映射.json` - 特征名称到分类的映射
- `data/data_1117/分类层级映射.json` - 分类层级结构

**使用方法：**
```bash
# 从项目根目录运行
python script/data_processing/extract_feature_categories.py

# 或者从任意目录运行
python /path/to/script/data_processing/extract_feature_categories.py
```

**输出格式1 - 特征名称_分类映射.json：**
```json
{
    "灵感点": {
        "猫咪": {
            "所属分类": ["物体", "实质"]
        }
    },
    "目的点": {...},
    "关键点": {...}
}
```

**输出格式2 - 分类层级映射.json：**
```json
{
    "灵感点": {
        "形式": {
            "几级分类": 1,
            "是否是叶子分类": false,
            "下一级": [
                {
                    "节点类型": "分类",
                    "节点名称": "概念"
                },
                {
                    "节点类型": "分类",
                    "节点名称": "方式"
                }
            ]
        }
    },
    "目的点": {...},
    "关键点": {...}
}
```

---

## 时间过滤机制

两个脚本都实现了时间过滤功能，避免使用"未来"的数据（时间穿越）：

1. **获取时间阈值**：从 `当前帖子_what解构结果` 目录中获取最早的帖子发布时间
2. **过滤条件**：只保留发布时间**早于**阈值的过去帖子
3. **警告信息**：打印被过滤掉的帖子ID和发布时间

**示例输出：**
```
当前帖子最早发布时间: 2025-11-07 15:08:59

正在应用时间过滤 (< 2025-11-07 15:08:59)，避免使用晚于当前帖子的数据...
  ⚠️  过滤掉帖子 69114f150000000007001f30 (发布时间: 2025-11-10 10:33:58，晚于阈值)
  ⚠️  过滤掉帖子 6915dfc400000000070224d9 (发布时间: 2025-11-14 10:22:16，晚于阈值)

过滤掉 2 个帖子（穿越），保留 17 个帖子
```

---

## 依赖

- `script.detail.get_xiaohongshu_detail` - 获取小红书帖子详情

---

## 注意事项

1. 脚本会自动使用缓存的帖子详情，避免重复请求
2. 如果当前帖子目录不存在或为空，将不启用时间过滤
3. 过滤后只保留有来源的特征，避免空数据
4. 所有路径都相对于项目根目录，可以从任意位置运行脚本
