跳转至

阶段 1.5:内容富化

模块: src/content_enricher.py
预计耗时: ~1 天

目标

通过三种互补策略填充缺失的摘要并获取关键论文的全文内容。

富化策略

系统按顺序应用策略,论文获得足够内容后即停止:

策略 A:Semantic Scholar API

  • 通过 DOI 获取每篇论文的 abstractTLDR(AI 生成的摘要)
  • 限速为每秒 1 个请求
  • 响应缓存至 output/openalex_cache/semantic_scholar/

策略 B:开放获取 PDF 下载

  1. 查询 Unpaywall API 查找 OA PDF URL
  2. 下载 PDF 文件
  3. 使用 PyMuPDF 提取文本(备选 pdfplumber)
  4. 将 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 富化内容来源(originalsemantic_scholaroa_pdf

缓存

所有 API 响应和下载文件均被缓存以避免重复请求:

output/openalex_cache/
├── semantic_scholar/    # S2 API JSON 响应
├── unpaywall/           # Unpaywall API JSON 响应
├── pdfs/                # 下载的 PDF 文件
└── fulltext/            # 提取的文本 JSON 文件

运行

# 通过流水线
uv run python main.py --phase 1.5

# 独立运行
uv run python -m src.content_enricher

# 跳过此阶段
uv run python main.py --skip-enrich