SKILL.md 6.1 KB


name: genek-extract-figures

description: 从学术论文 PDF 中提取高质量 Figure 图片。优先从出版商网站下载原始图,备选 pdftoppm 整页转图+裁剪。支持 Springer Nature、Elsevier、Wiley、PLOS 等主流出版商。当用户提及"提取论文图片"、"下载论文 figure"、"论文插图"、"extract figures"时使用此技能。

学术论文图片提取

工作流程

1. 从论文 PDF 中识别 DOI 和 Figure 数量
   │
2. 判断出版商 → 选择提取方式
   ├── 已知出版商 URL 模板 → 方法一:直接下载(推荐)
   ├── 未知出版商 → 方法二:浏览器访问论文网页版,手动定位图片 URL
   └── 无法访问网页版 → 方法三:pdftoppm 整页转图 + 裁剪
   │
3. 输出到 papers/{Author}{Year}/figures/ 目录,命名 fig1.png ~ figN.png
4. 删除中间文件,验证文件大小和完整性

方法优先级

优先级 方法 质量 适用场景
1 出版商网站下载 最佳,纯图表 已发表论文,出版商 URL 可推断
2 浏览器访问网页版 最佳 未知出版商,但论文有网页版
3 pdftoppm + 裁剪 需后处理 无法访问网页版(预印本、内部文档等)
4 pdfimages 碎片化,不推荐 仅作最后手段

方法一:出版商网站下载(推荐)

第一步:识别出版商

从论文 PDF 中提取 DOI(通常在首页页脚或页眉),根据 DOI 前缀判断出版商:

DOI 前缀 出版商 URL 模板可用
10.1038/ Springer Nature
10.1186/ BMC (Springer)
10.1007/ Springer
10.1016/ Elsevier ⚠️ 需从网页解析
10.1002/ Wiley ⚠️ 需从网页解析
10.1371/ PLOS
10.3390/ MDPI
10.1093/ Oxford Univ Press ⚠️ 需从网页解析

第二步:构造 URL 并下载

Springer Nature / BMC 系列(Nature, BMC Biology, Genome Biology 等):

https://media.springernature.com/full/springer-static/image/art%3A{DOI_ENCODED}/MediaObjects/{JOURNAL_ID}_{YEAR}_{ARTICLE_ID}_Fig{N}_HTML.png

DOI 解析规则(10.1186/s12915-022-01301-7 为例):

  • JOURNAL_ID = 12915/s 后到首个 - 之间的数字)
  • YEAR = 2022
  • ARTICLE_ID = 1301(去掉末尾修订号 -7

下载脚本(替换前5个变量为目标论文参数):

#!/bin/bash
AUTHOR_YEAR="Li2022"                # ← 替换:第一作者姓氏+年份
DOI="10.1186/s12915-022-01301-7"    # ← 替换
JOURNAL_ID="12915"                  # ← 替换
YEAR="2022"                         # ← 替换
ARTICLE_ID="1301"                   # ← 替换
FIG_COUNT=6                         # ← 替换为实际 Figure 数量

OUT="papers/${AUTHOR_YEAR}/figures"
DOI_ENCODED=$(echo "$DOI" | sed 's|/|%2F|g; s|:|%3A|g')
mkdir -p "$OUT"
for i in $(seq 1 $FIG_COUNT); do
  url="https://media.springernature.com/full/springer-static/image/art%3A${DOI_ENCODED}/MediaObjects/${JOURNAL_ID}_${YEAR}_${ARTICLE_ID}_Fig${i}_HTML.png"
  curl -sL -o "${OUT}/fig${i}.png" "$url"
  size=$(wc -c < "${OUT}/fig${i}.png" 2>/dev/null || echo 0)
  if [ "$size" -gt 10000 ]; then
    echo "fig${i}.png: OK (${size} bytes)"
  else
    echo "fig${i}.png: FAILED (${size} bytes) - URL 可能不正确"
    rm -f "${OUT}/fig${i}.png"
  fi
done

其他出版商 URL 模板详见 → references/publishers.md

方法二:浏览器访问网页版

URL 模板未知或下载失败时:

  1. 用浏览器打开 https://doi.org/{DOI} 跳转到论文网页版
  2. 在文章中找到 Figure,点击 "Full size image" / "Download" / "High resolution"
  3. 用开发者工具(F12 → Network)获取图片真实 URL
  4. curl -sL -o figures/figN.png "URL" 逐张下载
  5. 发现新的 URL 规律时,补充到 references/publishers.md

方法三:PDF 整页转图(备选)

前置条件:brew install poppler(macOS)或 apt install poppler-utils(Linux)

pdftoppm -png -r 300 paper.pdf figures/page

转换后人工确认 Figure 对应的页码,然后重命名:

mv figures/page-03.png figures/fig1.png
mv figures/page-05.png figures/fig2.png
# ...按实际页码调整
rm figures/page-*.png

裁剪(精度差,尽量避免)

from PIL import Image
img = Image.open("figures/fig1.png")
# (left, upper, right, lower) — 需逐张手动确定坐标
cropped = img.crop((35, 210, 2445, 2815))
cropped.save("figures/fig1.png")

已知问题:页眉位置因期刊不同而变化;图注与正文分界不清晰;耗时且效果不稳定。

方法四:pdfimages(不推荐)

pdfimages -png paper.pdf figures/img

学术 Figure 通常由多个子面板(A, B, C...)+ 向量图形混合存储,pdfimages 只能提取嵌入位图,结果碎片化。

输出目录规范

每篇论文以 papers/{Author}{Year}/ 为根目录,PDF 和提取图片均放在该目录下:

papers/
├── Li2022/
│   ├── paper.pdf
│   └── figures/
│       ├── fig1.png
│       └── fig2.png
├── Zhang2023/
│   ├── paper.pdf
│   └── figures/
│       ├── fig1.png
│       └── fig2.png
└── Wang2024a/              ← 同姓同年加 a/b 后缀
    ├── paper.pdf
    └── figures/
        └── fig1.png

命名规则:

  • 目录名取第一作者 姓氏(首字母大写)+ 发表年份,如 Li2022
  • 同姓同年冲突时追加小写字母:Wang2024aWang2024b
  • 从论文 PDF 首页提取作者和年份信息

文件命名

  • 主图:fig1.png ~ fig{N}.png
  • 补充图:sfig1.png ~ sfig{N}.png
  • 删除所有中间文件(page-*.pngtmp-*.pngimg-*.png

验证清单

  • 每张图片 > 10KB(空文件说明 URL 错误)
  • 图片数量与论文 Figure 数一致
  • 图片内容是纯图表(无页眉页脚、无正文)
  • 命名连续且与论文编号对应
  • 多论文时各子目录命名正确(作者姓氏+年份)