用途
Content Hydration 用于处理结构化数据导出中「只有引用、没有内容」的问题。当导出文件里的评论通过 URL 或 ID 指向父帖或父评论,但父内容并未内联存储时,该技能负责抓取这些被引用的内容,去重、缓存,并回连到原始记录,从而重建可分析的对话上下文。其核心原则是:导出只是骨架,ID 和 URL 指向的上下文必须被获取、去重、本地缓存,并在下游分析前回连到源记录。
主要能力
- 父级上下文补全:为评论补全父帖的标题、正文、作者,以及父评论的正文和作者。
- 投票/收藏内容抓取:为仅有永久链接的投票或收藏项抓取标题、正文、评分、子版块、作者等字段。
- 外部 URL 目录:从正文中正则提取外部 URL,按域名分类(视频、代码、图片、社交、参考、学术、文档、地图、短链、数据等),输出 external_links.csv。
- 去重与缓存:抓取前对 URL 去重,每个唯一 URL 只抓取一次,响应按 URL 哈希缓存到磁盘。
- 检查点与续传:通过 checkpoints/hydration_*.json 记录已抓取、失败、被限流的 URL,支持中断后恢复。
- 限流与退避:基线为每 2 秒一次请求,遇到 429/503 时采用指数退避并加入随机抖动。
- 清单记录:生成 hydration_manifest.json,记录各层的抓取统计、失败情况和覆盖率。
使用方式
参考实现位于 scripts/hydrate.py,实现了针对当前 Reddit 导出的上述模式。如果现有脚本与数据布局和需求匹配,可直接运行;如果导出格式不同、列有变化或需要额外层级,应参照本技能中的模式编写新脚本,而不是强行套用不匹配的脚本。
核心流程为:清洗后的 CSV → 第一层父级上下文(检查点 → 去重 URL 队列 → 通过 .json 技巧抓取 → 回连源记录)→ 第二层投票/收藏内容(同样的抓取与回连)→ 第三层外部 URL 目录(不抓取,仅正则提取与分类)→ 输出 data/enriched/、hydration_manifest.json 和报告。
Reddit 的 .json 技巧:在任意 Reddit 永久链接后追加 .json 即可获得结构化数据,无需 API 认证。返回一个 JSON 数组 [post_listing, comments_listing],帖子位于 [0]["data"]["children"][0]["data"],评论嵌套在 [1]["data"]["children"] 下。查找父评论时,给定评论的 link 列(父帖 URL)和 parent 列(裸评论 ID,如 dlazu42),在帖子 JSON 的评论树中搜索匹配 ID 即可。
适用场景
- 评论通过 URL/ID 引用父帖或父评论,但父内容不在导出中。
- 投票或收藏项仅以永久链接存在,本地没有标题、正文或元数据。
- 正文包含外部 URL,需要按域名和类型编目以做兴趣分析。
- 多个下游智能体需要同一份增强数据集——一次补全,多次消费。
- 前序流水线阶段(如 tiered-processing-pipeline)已清洗 CSV,但尚未解析链接引用。
限制
以下情况不适用:所有内容已内联(没有 URL/ID 引用需要解析);导出规模小到可以人工检查和补全;只需要元数据(时间戳、ID、计数),此时应使用 csv-metadata-forensic;策略禁止抓取外部内容或速率限制为零。
其他事实(如具体收费、价格、支持平台、效果指标等)暂未提供。