阶段 1.5:内容富化¶
模块: src/content_enricher.py
预计耗时: ~1 天
目标¶
通过三种互补策略填充缺失的摘要并获取关键论文的全文内容。
富化策略¶
系统按顺序应用策略,论文获得足够内容后即停止:
策略 A:Semantic Scholar API¶
- 通过 DOI 获取每篇论文的
abstract和TLDR(AI 生成的摘要) - 限速为每秒 1 个请求
- 响应缓存至
output/openalex_cache/semantic_scholar/
策略 B:开放获取 PDF 下载¶
- 查询 Unpaywall API 查找 OA PDF URL
- 下载 PDF 文件
- 使用 PyMuPDF 提取文本(备选 pdfplumber)
- 将 PDF 和提取的文本缓存至
output/openalex_cache/fulltext/
策略 C:CORE API(占位实现)¶
预留用于未来集成 CORE API 以获取更多全文访问。
数据流¶
flowchart LR
PUB[publications.parquet] --> E{富化}
E -->|策略 A| SS[Semantic Scholar API]
E -->|策略 B| UP[Unpaywall → PDF → 文本]
E -->|策略 C| CORE[CORE API]
SS --> OUT[更新的 publications.parquet]
UP --> OUT
CORE --> OUT
新增列¶
富化后,以下列被添加到 publications.parquet:
| 列名 | 类型 | 说明 |
|---|---|---|
abstract_enriched |
string | 最佳可用摘要(原始或来自 S2) |
tldr |
string | 来自 Semantic Scholar 的 AI 生成单行摘要 |
fulltext |
string | 从 PDF 提取的论文全文 |
content_source |
string | 富化内容来源(original、semantic_scholar、oa_pdf) |
缓存¶
所有 API 响应和下载文件均被缓存以避免重复请求:
output/openalex_cache/
├── semantic_scholar/ # S2 API JSON 响应
├── unpaywall/ # Unpaywall API JSON 响应
├── pdfs/ # 下载的 PDF 文件
└── fulltext/ # 提取的文本 JSON 文件