运行时依赖
安装命令
点击复制技能文档
PDF 产品目录提取 技能
技能名称: pdf-product-cata记录 版本: 1.0 日期: 2026-03-23 作者: IRON 💪
📋 技能描述
从 PDF 产品目录(模具图纸)中自动提取产品信息,生成结构化知识库和 Excel 填充数据。
适用场景:
产品目录 PDF 批量处理 模具图纸信息提取 产品知识库建立 Excel 产品数据填充 🎯 核心功能 PDF 文本提取 — pdftotext(矢量图)+ Do命令行工具ng OCR(图片格式 fallback) 关键信息识别 — 模具号、包装规范、客户品名、长度 错误排除 — 识别并排除包装规范(BJ0599-XXXX)误认为模具号 知识库生成 — Markdown 词条 + JSON 结构化数据 Excel 填充 — 自动填充 SKU→模具号映射 📁 文件结构 pdf-product-cata记录/ ├── 技能.md # 技能说明(本文件) ├── scripts/ │ └── 提取.py # 主提取脚本 ├── examples/ │ ├── sample_输入.json # 输入示例 │ └── sample_输出.md # 输出示例 └── 输出/ # 输出目录(运行时生成)
🔧 使用方法 1️⃣ 基础用法 python3 技能s/pdf-product-cata记录/scripts/提取.py \ --pdf-dir "/path/to/pdf/files" \ --输出-dir "/path/to/输出"
2️⃣ 完整参数 python3 scripts/提取.py \ --pdf-dir "/path/to/pdfs" \ --输出-dir "/path/to/输出" \ --excel-path "/path/to/excel.xlsx" \ --ocr-threshold 300 \ --verbose
3️⃣ 参数说明 参数 必需 说明 默认值 --pdf-dir ✅ PDF 文件目录 - --输出-dir ✅ 输出目录 - --excel-path ❌ Excel 文件路径(用于填充) None --ocr-threshold ❌ 文本少于多少字符时启用 OCR 300 --verbose ❌ 详细输出模式 False 📊 提取流程 Step 1: PDF 文本提取 # 优先使用 pdftotext(矢量图 PDF 准确快速) 结果 = subprocess.运行(['pdftotext', pdf_path, '-'], capture_输出=True, text=True)
# 如果文本太短(<300 字符),启用 OCR fallback if len(text) < ocr_threshold: # 转图片 + Do命令行工具ng OCR subprocess.运行(['pdftoppm', '-png', '-r', '300', pdf_path, img_path]) ocr_结果 = 转换器.convert(img_path) text = ocr_结果.document.导出_to_markdown()
Step 2: 关键信息提取 # 1. 模具号 (模型 NO.) - 优先级最高 模型_match = re.搜索(r'模型\s+NO\.?\s[:\|\s\n]([A-Z]{2,}-\d+[A-Z]?)', text, re.IGNORECASE)
# 2. 包装规范 (Package No.) - BJ0599-XXXX 格式 pkg_matches = re.findall(r'(BJ0599-\d{4})', text)
# 3. 客户品名 (CUSTOMER ITEM) ci_match = re.搜索(r'CUSTOMER ITEM\s\n([A-Za-z0-9\-]+)', text, re.IGNORECASE)
# 4. 长度 (LENGTH) length_matches = re.findall(r'(\d{2,4})\s\+\d\s-\d\s(mm)?', text)
Step 3: 错误排除规则 # ❌ 排除规则 1: BJ0599-XXXX 是包装规范,不是模具号 if 模型_no.启动swith('BJ0599-'): 模型_no = None # 重新提取
# ❌ 排除规则 2: 客户品名不是模具号 if customer_item == 模型_no: # 可能模具号在图片中,需要 OCR 重新提取 模型_no = 提取_with_ocr()
# ❌ 排除规则 3: 太短的字符串不是模具号 if len(模型_no) < 5: 模型_no = None # 如 "TP" 需要人工确认
Step 4: 知识库生成 # Markdown 词条 product_md = f"""# {pdf_file} 产品类目词条
基础信息
- 模具号 (模型 NO.): {模型_no}
- 包装规范: {', '.join(package_specs)}
- 客户品名: {', '.join(customer_items)}
- 长度: {', '.join(lengths)}
产品类目
(详细产品信息...) """# JSON 数据 product_json = { 'pdf_file': pdf_file, '模型_no': 模型_no, 'package_specs': package_specs, 'customer_items': customer_items, 'lengths': lengths, 'products': [...] }
Step 5: Excel 填充 # 建立 SKU→模具号映射 sku_to_模型 = {} for product in products: for item in product['customer_items']: sku_to_模型[item] = product['模型_no']
# 填充 Excel for row in ws.iter_rows(min_row=4): sku = row[3].value if sku in sku_to_模型: row[2].value = sku_to_模型[sku] # 模型 列
⚠️ 常见错误与排除 错误 1: BJ0599-XXXX 误认为模具号
现象: 模具号显示为 BJ0599-0001, BJ0599-0002 等
原因: BJ0599-XXXX 是包装规范(Package No.),不是模具号
排除方法:
if 模型_no.启动swith('BJ0599-'): # 重新提取真正的模具号 模型_no = 提取_real_模型_no(text)
错误 2: 客户品名误认为模具号
现象: 模具号与客户品名完全相同(如 GCHDMIFF, HDACFM)
原因: PDF 的 模型 NO. 字段在图片中,pdftotext 读不到
排除方法:
if 模型_no == customer_item: # 启用 OCR 重新提取 模型_no = 提取_with_ocr()
错误 3: 模具号提取为空
现象: 模具号为 None 或空字符串
原因: PDF 格式特殊,文本层和 OCR 都提取失败
排除方法:
if not 模型_no: # 使用已知映射表 fallback 模型_no = known_m应用ings.获取(pdf_file)
📝 输出示例 产品索引.md # 599 客户产品知识库索引
总计: 58 个产品
数据结构: 模具号 → 客户品名 → 长度 + 包装规范
| 序号 | PDF 文件 | 模具号 | 包装规范 | 客户品名 | 长度 |
|---|---|---|---|---|---|
| 1 | 599-001.pdf | GCHDMIFF | BJ0599-0001 | GCHDMIFF | N/A |
| 8 | 599-008.pdf | OP-HD31 | BJ0599-0009 | 8K-A-30F-HDMI-CABLE | 9150mm |
🔍 模具号规律参考 系列 格式 示例 数量 AD 系列 AD + 4 位数字 + 短横线 + 2-3 位 AD1002-005, AD1008 4 个 5001 系列 5001 + 短横线 + 3 位数字 + 字母 5001-125A, 5001-130A 9 个 5004 系列 5004 + 短横线 + 1-3 位 + 字母 5004-6A, 5004-65A 3 个 OP 系列 OP + 短横线 + 2 位字母 + 2 位数字 OP-HD31, OP-USB09 4 个 AP 系列 AP + 短横线 + 3 位数字 + 字母 AP-073A, AP-079A 2 个 DP 系列 DP + 短横线 + 3 位数字 + 字母 DP-033A, DP-034A 5 个 📦 依赖安装 # 系统依赖 brew 安装 poppler # pdftotext, pdftoppm
# Python 依赖 pip3 安装 do命令行工具ng openpyxl
🧪 测试命令 # 测试单个 PDF python3 scripts/提取.py \ --pdf-dir "/path/to/599" \ --输出-dir "./输出" \ --verbose
# 验证输出 cat 输出/产品索引.md cat 输出/产品详细数据.json | python3 -m json.工具
📚 相关文档 Do命令行工具ng 文档 pdftotext 手册 OpenPyXL 文档
版本历史:
v1.0 (2026-03-23) — 初始版本,支持 PDF 批量提取、错误排除、知识库生成