Skip to main content

reaction-data-extraction

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

Source facts

Repository
InternScience/ChemClaw
Last source activity
March 25, 2026 at 04:55
Detected SKILL.md language
Chinese
Stars
53
Forks
13

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
6 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
reaction-data-extraction
description
从 PDF 文献中提取化学反应数据,特别是反应条件优化信息。支持提取反应物、产物、催化剂、溶剂、温度、时间、产率等,并输出结构化 CSV 文件。使用 MinerU + NLP + 规则匹配进行精确提取。
trigger
["反应数据提取","提取反应条件","reaction extraction","extract reaction conditions","从文献提取反应","反应优化数据","reaction optimization","提取产率","extract yield","反应表格","reaction table"]
# 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 偶联反应的条件 ``` ### 命令行使用 ```bash # 基本提取(自动模式) 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` | ## 输出示例 ### 基本提取 ```bash $ 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 输出示例 ```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 输出示例 ```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 } ] } ``` ## 依赖安装 ```bash # 安装 MinerU(命令行工具) pip install 'mineru[all]' # 如果遇到 numpy 版本问题 pip install 'numpy<2.0' 'pandas<3.0' # 检查安装 mineru --version ``` ### 检查安装 ```bash # 检查 MinerU 命令行工具 mineru --help # 测试 PDF 解析 mineru -p test.pdf -o ./test_output -m txt ``` ## 工作流程 ### 1. PDF 解析(使用 MinerU 命令行) ```python import subprocess # 运行 MinerU cmd = [ "mineru", "-p", "paper.pdf", "-o", "./output", "-m", "auto", "-l", "en", "--backend", "pipeline", "-d", "cpu" ] result = subprocess.run(cmd, capture_output=True, text=True, timeout=600) ``` ### 2. 表格检测与提取 ```python import re # 从 Markdown 中提取表格 table_pattern = r'\|.*?\|.*?\|.*?\n\|[-\| ]+\|\n((?:\|.*?\|\n)+)' tables = re.findall(table_pattern, text_content, re.MULTILINE) ``` ### 3. 反应数据解析 ```python def parse_reaction_table(table_text): lines = table_text.strip().split('\n') headers = [h.strip() for h in lines[0].split('|') if h.strip()] reactions = [] for line in lines[2:]: values = [v.strip() for v in line.split('|') if v.strip()] reaction = dict(zip(headers, values)) reactions.append(reaction) return reactions ``` ### 4. 文本数据提取 ```python # 反应条件模式 patterns = { 'temperature': r'(\d+\s*°C|rt|reflux)', 'time': r'(\d+\s*(h|hr|hour|min)s?)', 'yield': r'(\d+\s*%)', 'catalyst': r'(Pd\([^)]+\)|Pd₂\(dba\)₃)', } for key, pattern in patterns.items(): match = re.search(pattern, sentence, re.IGNORECASE) if match: reaction[key] = match.group(1) ``` ## 反应类型识别 支持识别的反应类型: | 反应类型 | 关键词 | |---------|--------| | Suzuki-Miyaura | Suzuki, boronic acid, Pd catalyst | | Heck | Heck, alkene, Pd catalyst | | Sonogashira | Sonogashira, alkyne, Cu co-catalyst | | Buchwald-Hartwig | Buchwald, amination, Pd catalyst | | Oxidative amination | oxidative, amination, oxidant | | Click | Click, azide, alkyne, CuAAC | | Diels-Alder | Diels-Alder, diene, dienophile | | Aldol | Aldol, enolate, carbonyl | | Oxidation | Oxidation, oxidant | | Reduction | Reduction, reductant, hydrogenation | ## 与其他技能配合 ### 与 literature-parsing 配合 ```bash # 1. 先解析 PDF 为 Markdown python3 ../literature-parsing/scripts/literature_parsing.py -i paper.pdf -o ./parsed # 2. 从 Markdown 提取反应数据 python3 scripts/reaction_data_extraction.py -i ./parsed/paper.md -o ./output ``` ### 与 yields-prediction 配合 ```bash # 1. 提取实验产率数据 python3 scripts/reaction_data_extraction.py -i paper.pdf -o ./output # 2. 使用 ML 模型预测相同反应的产率 python3 ../yields-prediction/scripts/yields_predictor.py \ --reactants "reactant_smiles" \ --products "product_smiles" ``` ## 完整工作流程示例 ### 示例 1: 单篇文献提取 ```bash # 提取所有反应数据 python3 scripts/reaction_data_extraction.py \ -i jacs_paper.pdf \ -o ./output/jacs_data \ --output-format csv \ -v # 查看结果 cat ./output/jacs_data/reaction_data.csv ``` ### 示例 2: 批量提取 ```bash # 批量处理整个目录 python3 scripts/reaction_data_extraction.py \ -i ./papers/ \ -o ./output/all_reactions \ --batch # 合并所有数据 python3 scripts/merge_reactions.py \ -i ./output/all_reactions/ \ -o ./output/combined_reactions.csv ``` ### 示例 3: 只提取最优条件 ```bash # 提取并过滤高产率条件 python3 scripts/reaction_data_extraction.py \ -i paper.pdf \ -o ./output \ --output-format json # 后处理:筛选最优条件 python3 scripts/filter_optimal.py \ -i ./output/reaction_data.json \ --min-yield 80 \
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub