# 数据处理模块 本模块提供数据提取和转换功能,用于处理小红书帖子的特征提取和分类映射。 ## 目录结构 ``` 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. 所有路径都相对于项目根目录,可以从任意位置运行脚本