AgentStack
SKILL unreviewed MIT Self-run

Reaction Data Extraction

skill-internscience-chemclaw-reaction-data-extraction · by InternScience

从 PDF 文献中提取化学反应数据,特别是反应条件优化信息。支持提取反应物、产物、催化剂、溶剂、温度、时间、产率等,并输出结构化 CSV 文件。使用 MinerU + NLP + 规则匹配进行精确提取。

No reviews yet
0 installs
14 views
0.0% view→install

Install

$ agentstack add skill-internscience-chemclaw-reaction-data-extraction

Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Dangerous shell/eval execution.

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution Used
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Reaction Data Extraction? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Reaction Data Extraction

从化学文献 PDF 中精确提取化学反应数据,特别是反应条件优化信息。支持提取反应物、产物、催化剂、溶剂、温度、时间、产率等关键信息,并输出结构化的 CSV/JSON 文件。

触发条件

  • 用户提供 PDF 文献并要求提取反应数据
  • 提到"提取反应条件"、"反应优化数据"
  • 说"extract reaction conditions"、"reaction data from PDF"
  • 需要从文献中整理反应表格
  • 需要批量提取多篇文献的反应数据

功能特性

  • 反应物/产物识别 - 自动提取反应物和产物的 SMILES/名称
  • 反应条件提取 - 催化剂、配体、溶剂、添加剂
  • 参数提取 - 温度、时间、压力、浓度
  • 产率提取 - 分离产率、GC 产率、NMR 产率
  • 反应类型识别 - 偶联、氧化、还原、环化等
  • 表格数据提取 - 从反应条件优化表格中提取数据
  • 支持体内容 - 从正文段落中提取反应描述
  • 结构化输出 - CSV/JSON 格式,便于后续分析
  • 批量处理 - 支持多篇文献批量提取
  • 置信度评分 - 每个提取结果附带置信度

核心技术

| 组件 | 用途 | |------|------| | MinerU | PDF 解析和文本提取 (命令行调用) | | 正则表达式 | 反应条件模式匹配 | | Rule-based Parser | 反应句子解析 | | 表格解析器 | Markdown 表格→反应数据 |

提取的数据字段

| 字段 | 说明 | 示例 | |------|------|------| | reaction_id | 反应唯一标识 | RXN_001 | | entry | 表格中的条目号 | 1, 2, 3 | | reactants | 反应物 (SMILES 或名称) | c1ccccc1Br | | products | 产物 (SMILES 或名称) | c1ccccc1-c2ccccc2 | | catalyst | 催化剂 | Pd(PPh3)4 | | ligand | 配体 | PPh3 | | base | 碱 | K2CO3 | | solvent | 溶剂 | DMF, Toluene | | temperature | 温度 | 80 °C, rt, reflux | | time | 反应时间 | 12 h, 30 min | | pressure | 压力 (如有) | 1 atm, 10 bar | | concentration | 浓度 | 0.1 M | | yield_value | 产率数值 | 85 | | yield_type | 产率类型 | isolated, GC, NMR | | ee_value | 对映选择性 | 99%, >99% | | reaction_type | 反应类型 | Suzuki coupling | | scheme_number | 反应式编号 | Scheme 1, Table 2 | | page_number | 页码 | 5 | | confidence | 提取置信度 | 0.95 | | notes | 备注 | optimized condition |

使用方法

对话框中使用

从这篇 PDF 提取所有反应条件
提取反应优化数据并生成 CSV
extract reaction data from this paper
把文献中的反应表格整理成 Excel
提取 Suzuki 偶联反应的条件

命令行使用

# 基本提取(自动模式)
python3 scripts/reaction_data_extraction.py -i paper.pdf -o ./output

# 只提取表格数据
python3 scripts/reaction_data_extraction.py -i paper.pdf -o ./output --tables-only

# 只提取体内容反应
python3 scripts/reaction_data_extraction.py -i paper.pdf -o ./output --text-only

# 批量处理
python3 scripts/reaction_data_extraction.py -i ./papers/ -o ./output --batch

# JSON 输出
python3 scripts/reaction_data_extraction.py -i paper.pdf -o ./output --output-format json

# 详细模式
python3 scripts/reaction_data_extraction.py -i paper.pdf -o ./output -v

# 使用 OCR 处理扫描版
python3 scripts/reaction_data_extraction.py -i scanned.pdf -o ./output --method ocr

参数说明

| 参数 | 简写 | 说明 | 默认值 | |------|------|------|--------| | --input | -i | 输入 PDF 文件或目录 | - | | --output | -o | 输出目录 | ~/.openclaw/media/reaction-data-extraction | | --tables-only | -t | 只提取表格数据 | false | | --text-only | --text | 只提取体内容反应 | false | | --output-format | -f | 输出格式:csv/json | csv | | --method | -m | MinerU 解析方法:auto/txt/ocr | auto | | --lang | -l | OCR 语言 | en | | --device | -d | 设备:cpu/cuda | cpu | | --verbose | -v | 详细输出 | false | | --batch | -b | 批量处理模式 | false |

输出示例

基本提取

$ python3 scripts/reaction_data_extraction.py -i organic_paper.pdf -o ./output -v
✓ 输出目录:/home/lla/.openclaw/media/reaction-data-extraction/output
  提取模式:all
  输出格式:csv

✓ 开始处理:organic_paper.pdf
  [1/3] 解析 PDF...
    命令:mineru -p organic_paper.pdf -o ./output -m auto -l en --backend pipeline -d cpu
    ✓ PDF 解析完成,文本长度:41804 字符
    检测到表格:3 个
  [2/3] 从表格提取反应数据...
    提取表格反应:25
  [3/3] 从文本提取反应数据...
    从文本提取:18 个反应

✓ 已处理:organic_paper.pdf
  提取反应数:43
  ✓ CSV 已保存:./output/organic_paper/reaction_data.csv
  ✓ 日志已保存:./output/organic_paper/extraction_log.txt

============================================================
✅ 全部完成!
   输出目录:/home/lla/.openclaw/media/reaction-data-extraction/output

CSV 输出示例

reaction_id,entry,catalyst,ligand,solvent,temperature,time,yield_value,ee_value,reaction_type,source,confidence
RXN_001,1,Pd₂(dba)₃,L7,MeOH,40 °C,24 h,99,99%,asymmetric oxidative allylic amination,table_0,0.9
RXN_002,2,Pd(OAc)₂,L7,MeOH,40 °C,24 h,trace,,asymmetric oxidative allylic amination,table_0,0.9
RXN_003,3,Pd(dba)₂,L7,MeOH,40 °C,24 h,97,99%,asymmetric oxidative allylic amination,table_0,0.9

JSON 输出示例

{
  "extraction_date": "2026-03-17T22:04:38",
  "total_reactions": 43,
  "reactions": [
    {
      "reaction_id": "RXN_001",
      "entry": 1,
      "catalyst": "Pd₂(dba)₃",
      "ligand": "L7",
      "solvent": "MeOH",
      "temperature": "40 °C",
      "time": "24 h",
      "yield_value": 99,
      "ee_value": "99%",
      "source": "table_0",
      "confidence": 0.9
    }
  ]
}

依赖安装

# 安装 MinerU(命令行工具)
pip install 'mineru[all]'

# 如果遇到 numpy 版本问题
pip install 'numpy90%
- ✅ **支持多种格式** - CSV/JSON 输出
- ✅ **置信度评分** - 每个结果附带置信度
- ✅ **MinerU 命令行** - 使用 subprocess 调用,避免库导入问题
- ⚠️ **PDF 质量** - 扫描版 PDF 需要使用 `--method ocr`
- ⚠️ **复杂表格** - 跨页表格可能需要手动校正
- ⚠️ **隐式条件** - 某些条件可能在正文中描述而非表格
- ⚠️ **处理时间** - 长文献可能需要几分钟

## 错误处理

| 错误 | 说明 | 解决方案 |
|------|------|----------|
| `No tables found` | 未检测到表格 | 使用 --text-only 提取体内容反应 |
| `MinerU execution failed` | MinerU 执行失败 | 检查 mineru 是否正确安装 |
| `Timeout` | 处理超时(>10 分钟) | 尝试 `-m txt` 模式或减小文件 |
| `Low confidence` | 提取置信度低 | 检查原文,手动校正 |
| `File not found` | PDF 文件不存在 | 检查文件路径 |

## 性能参考

| 文档类型 | 页数 | 处理时间 | 提取反应数 |
|----------|------|---------|-----------|
| 短篇通信 | 4-6 | ~30s | 5-15 |
| 完整论文 | 10-15 | ~1-2min | 20-50 |
| 综述文章 | 20-30 | ~3-5min | 50-100+ |
| 支持信息 | 50-100 | ~5-10min | 100-200+ |

## 输出目录白名单

**重要**:为了能在飞书等平台上发送生成的文件,输出目录必须在白名单内:

- ✅ `~/.openclaw/media/reaction-data-extraction/`
- ✅ `~/.openclaw/workspace/`
- ✅ `~/.openclaw/agents/`

本 skill 默认输出到 `~/.openclaw/media/reaction-data-extraction/`,可以直接分享!

## 常见问题

### Q: 提取的产率数据不准确怎么办?
A: 
- 检查原文中产率的表示方式(isolated/GC/NMR)
- 某些表格可能使用 footnote 说明
- 手动校正后更新 CSV

### Q: 如何处理支持信息 (Supporting Information)?
A: 
- SI 通常包含更多反应数据
- 使用相同流程处理 SI PDF
- 合并主文和 SI 的数据

### Q: MinerU 导入失败怎么办?
A: 
- 本技能使用 MinerU 命令行工具,不依赖 Python 库导入
- 确保 `mineru` 命令可用:`mineru --help`
- 如果不行,重新安装:`pip install -U 'mineru[all]'`

### Q: 如何验证提取结果的准确性?
A: 
- 检查 confidence 字段(>0.8 较可靠)
- 随机抽样人工核对
- 与原文表格对比

## 技术细节

### MinerU 优势

MinerU 是 opendatalab 开源的工业级 PDF 解析工具:

- 📊 **布局分析** - 准确识别标题、段落、表格、图片
- 📐 **公式保留** - 完整保留 LaTeX 数学公式
- 🖼️ **图片提取** - 提取嵌入的图片
- 📝 **OCR 支持** - 支持扫描版 PDF
- 🌍 **多语言** - 支持 109 种语言 OCR

### 命令行调用 vs Python 库

本技能使用**命令行调用**MinerU,而不是 Python 库导入:

```python
# ✅ 推荐:命令行调用
subprocess.run(["mineru", "-p", "paper.pdf", "-o", "./output"])

# ❌ 避免:Python 库导入(可能有版本兼容问题)
from mineru.backend import Pipeline

优势:

  • 避免版本兼容性问题
  • 更稳定的执行环境
  • 易于调试和错误处理

置信度评分

| 来源 | 置信度 | 说明 | |------|--------|------| | 表格数据 | 0.9-0.95 | 结构化数据,准确率高 | | 体内容明确描述 | 0.7-0.8 | 清晰的反应描述 | | 体内容模糊描述 | 0.3-0.5 | 需要人工核对 |

引用

核心技术:

引用:

@article{swain2016chemdataextractor,
  title={ChemDataExtractor: a toolkit for automated extraction of chemical information from the scientific literature},
  author={Swain, Matthew C and Cole, Jacqueline M},
  journal={Journal of Chemical Information and Modeling},
  year={2016}
}

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.