Skip to main content

reaction-data-extraction

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

معلومات المصدر

المستودع
InternScience/ChemClaw
آخر نشاط في المصدر
٢٥ مارس ٢٠٢٦ في ٠٤:٥٥
لغة SKILL.md المكتشفة
الصينية
النجوم
٥٣
التفرعات
١٣

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
6 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
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 \
عرض على GitHub
ملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub