src/content_enricher¶
阶段 1.5 模块,通过外部 API 和 OA PDF 富化论文内容。
函数¶
fetch_semantic_scholar(doi: str, cache_dir: str) → dict¶
从 Semantic Scholar API 获取摘要和 TLDR。
参数:
| 名称 | 类型 | 说明 |
|---|---|---|
doi |
str |
论文 DOI |
cache_dir |
str |
缓存响应的目录 |
返回值: 包含 abstract、tldr 键的字典(未找到时值为 None)。
副作用: 将响应缓存到 {cache_dir}/semantic_scholar/{doi_sanitized}.json。限速 1 请求/秒。
fetch_oa_fulltext(doi: str, pdf_url: str, cache_dir: str) → dict¶
下载开放获取 PDF 并提取全文。
参数:
| 名称 | 类型 | 说明 |
|---|---|---|
doi |
str |
论文 DOI |
pdf_url |
str |
OA PDF 直链 URL |
cache_dir |
str |
缓存目录 |
返回值: 包含 fulltext(提取的文本字符串)键的字典。
_extract_text_from_pdf(pdf_path: str) → str¶
使用 PyMuPDF(主要)或 pdfplumber(备选)从 PDF 文件提取文本。
_get_unpaywall_pdf_url(doi: str, cache_dir: str) → str | None¶
查询 Unpaywall API 获取指定 DOI 的开放获取 PDF URL。
返回值: PDF URL 字符串,未找到 OA 版本时返回 None。
fetch_core_fulltext(doi: str, cache_dir: str) → dict¶
从 CORE API 获取全文。目前为占位实现。
enrich_content(publications: pl.DataFrame, cfg: dict, strategies: list[str] = None) → pl.DataFrame¶
主要富化编排器。按顺序应用富化策略。
参数:
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
publications |
pl.DataFrame |
— | 论文 DataFrame |
cfg |
dict |
— | 项目配置字典 |
strategies |
list[str] |
["semantic_scholar", "oa_pdf"] |
按顺序应用的策略 |
返回值: 更新后的 DataFrame,含 abstract_enriched、tldr、fulltext、content_source 列。
print_enrichment_stats(publications: pl.DataFrame) → None¶
打印富化覆盖率统计(各策略富化了多少论文)。
run() → None¶
执行完整的阶段 1.5 流水线:
- 加载
publications.parquet - 运行富化策略
- 打印统计
- 用富化数据覆盖
publications.parquet