Install
openclaw skills install @thcjp/drawing-insight-freeopenclaw skills install @thcjp/drawing-insight-free从一张施工PDF图纸中,10秒拿到结构化数据:标题栏、尺寸、注释、符号、质量问题一网打尽。
通过 pdfplumber 库逐页提取文本与表格,保留坐标信息用于后续定位。
import pdfplumber
with pdfplumber.open("A101_Floor_Plan.pdf") as pdf:
for page in pdf.pages:
text = page.extract_text() or ""
tables = page.extract_tables()
# 文本送入模式匹配,表格送入明细表解析
输入: 用户提供PDF图纸文本抽取所需的指令和必要参数。 处理: 按照skill规范执行PDF图纸文本抽取操作,遵循单一意图原则。 输出: 返回PDF图纸文本抽取的执行结果,包含操作状态和输出数据。
针对常见标题栏字段,使用以下正则模式提取:
| 字段 | 正则模式 | 示例匹配 |
|---|---|---|
| 项目名 | PROJECT(?:\s*NAME)?:\s*(.+?)(?:\n|$) | PROJECT: Greenfield Tower |
| 图号 | SHEET(?:\s*NO)?\.?:\s*([A-Z]?\d+(?:\.\d+)?) | SHEET NO.: A101 |
| 比例 | SCALE:\s*(.+?)(?:\n|$) | SCALE: 1/4" = 1'-0" |
| 日期 | DATE:\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4}) | DATE: 03/15/2026 |
| 版本 | REV(?:ISION)?\.?:\s*(\S+) | REV: B |
| 绘制人 | (?:DRAWN|DRN)\s*(?:BY)?:\s*(\S+) | DRAWN BY: J.Lee |
| 校对人 | (?:CHECKED|CHK)\s*(?:BY)?:\s*(\S+) | CHECKED BY: M.Wang |
| 专业 | 从图号前缀自动推断 | A→建筑, S→结构, M→机电 |
输入: 用户提供标题栏八要素识别所需的指令和必要参数。 处理: 按照skill规范执行标题栏八要素识别操作,遵循单一意图原则。 输出: 返回标题栏八要素识别的执行结果,包含操作状态和输出数据。
支持英制与公制双单位:
DIMENSION_PATTERNS = [
r"(\d+'-\s*\d+(?:\s*\d+/\d+)?\"?)", # 10'-6", 10' - 6 1/2"
r"(\d+(?:\.\d+)?)\s*(?:mm|cm|m|ft|in)", # 1200mm, 3.5m
r"(\d+'-\d+\")", # 紧凑英制 10'-6"
r"(\d+)\s*(?:SF|LF|CY|EA)", # 数量类 100 SF
]
输入: 用户提供尺寸标注解析所需的指令和必要参数。 处理: 按照skill规范执行尺寸标注解析操作,遵循单一意图原则。 输出: 返回尺寸标注解析的执行结果,包含操作状态和输出数据。
input_params参数,支持创建/查询/导出操作将注释自动归类为六类,便于后续检索:
| 注释类型 | 匹配模式 | 典型示例 |
|---|---|---|
| keynote(索引符号) | ^\d{1,2}[A-Z]?$ | 1A, 12, 5B |
| room_tag(房间标签) | ^(?:RM|ROOM)\s*\d+ | RM 101 |
| door_tag(门编号) | ^[A-Z]?\d{2,3}[A-Z]?$ | D101, A12B |
| grid_line(轴线) | ^[A-Z]$|^\d+$ | A, B, 1, 2 |
| elevation(标高) | ^(?:EL|ELEV)\.?\s*\d+ | EL. +3.200 |
| detail_ref(详图引用) | ^\d+/[A-Z]\d+ | 3/A101 |
输入: 用户提供注释分类识别所需的指令和必要参数。 处理: 按照skill规范执行注释分类识别操作,遵循单一意图原则。 输出: 返回注释分类识别的执行结果,包含操作状态和输出数据。
自动识别图纸中的门表、窗表、设备表等明细表,将表头与表体映射为结构化构件符号:
def parse_schedule_table(table):
headers = [str(c).lower() if c else '' for c in table[0]]
tag_col = next((i for i, h in enumerate(headers)
if 'tag' in h or 'mark' in h or 'no' in h), 0)
type_col = next((i for i, h in enumerate(headers)
if 'type' in h or 'size' in h), -1)
symbols = []
for row in table[1:]:
tag = str(row[tag_col]).strip() if len(row) > tag_col and row[tag_col] else ''
if tag:
symbols.append({
'tag': tag,
'type': str(row[type_col]).strip() if type_col >= 0 else '',
'properties': {headers[i]: str(row[i])
for i in range(len(headers)) if i < len(row) and row[i]}
})
return symbols
输入: 用户提供明细表解析为构件符号所需的指令和必要参数。 处理: 按照skill规范执行明细表解析为构件符号操作,遵循单一意图原则。 输出: 返回明细表解析为构件符号的执行结果,包含操作状态和输出数据。
input_params参数,支持创建/查询/导出操作免费版提供四项基础质量检查,输出问题清单:
输入: 用户提供图纸质量自动检查所需的指令和必要参数。 处理: 按照skill规范执行图纸质量自动检查操作,遵循单一意图原则。 输出: 返回图纸质量自动检查的执行结果,包含操作状态和输出数据。 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:从建筑施工、PDF、图纸中提取标题栏、注释与符号、生成质量检查报告、单文件快速解析、图纸解析、免费版、面向建筑、机电工程师与造价、提供从、施工图纸中自动提、取标题栏、尺寸标注、注释说明、构件符号以及质量、问题的能力、基于正则模式与表、格解析的双通道抽、结合英制、公制单位自动识别、让原本需要人工逐、张阅读的图纸在数、秒内转为结构化数、Use、when、需要文件处理、文档转换、格式互转、内容提取时使用、不适用于加密文件等。
pip install pdfplumber
from drawing_insight import DrawingAnalyzer
analyzer = DrawingAnalyzer()
result = analyzer.analyze_pdf("A101_Floor_Plan.pdf")
# 查看标题栏
if result.title_block:
tb = result.title_block
print(f"图号: {tb.sheet_number}")
print(f"标题: {tb.sheet_title}")
print(f"比例: {tb.scale}")
print(f"专业: {tb.discipline}")
# 查看抽取统计
print(f"尺寸数: {len(result.dimensions)}")
print(f"注释数: {len(result.annotations)}")
print(f"符号数: {len(result.symbols)}")
# 查看质量问题
for issue in result.quality_issues:
print(f"⚠️ {issue}")
report = analyzer.generate_report(result)
Path("A101_report.md").write_text(report, encoding="utf-8")
痛点:传统算量需要逐张图纸、逐条尺寸手动抄录,一张A1图纸平均耗时15-30分钟,且易错。
对策:用本工具批量提取尺寸标注,导出为结构化数据后直接导入算量软件。
效果:单张图纸尺寸抽取从20分钟缩短至30秒,准确率从约85%(人工)提升至95%+(模式匹配),并自动按单位分类。
痛点:BIM建模前需确认图纸是否包含必要信息(比例、日期、版本、专业),缺失会导致建模返工。
对策:先运行质量检查,识别标题栏缺项与无尺寸/无注释的异常图纸。
效果:建模前的图纸体检从人工抽检2小时/项目缩短至全量自动检查5分钟/项目,返工率降低约40%。
痛点:建筑、结构、机电专业图纸分散,跨专业协同时常需查找"某张图的图号/比例/版本"。
对策:批量解析各专业图纸,提取标题栏生成统一索引表。
效果:跨专业图纸检索从翻阅纸质/ PDF目录平均5分钟/次降至秒级查询。
不支持。免费版仅支持PDF格式。DWG格式需要先转换为PDF,或使用专业版的DWG原生解析能力。
不能。本工具基于文本层抽取,扫描件需要先通过OCR工具(如Tesseract)转为文本型PDF。专业版内置OCR预处理流程。
常见原因:标题栏字段命名非标准、尺寸标注使用了非英制/非公制单位、表格存在合并单元格。建议检查原图纸的文本层是否完整,并参考故障排查表调整正则模式。
可以批量但有限制:单次最多处理5张图纸,且不生成跨图纸索引。需要大规模批量与跨图纸对比请使用专业版。
包含:文件名、标题栏八要素、内容统计(尺寸数/注释数/符号数)、质量问题清单、前20个构件符号列表。均为Markdown格式,可直接在GitHub/Obsidian中查看。
| 问题 | 可能原因 | 解决方案 | 优先级 |
|---|---|---|---|
| 标题栏字段提取为空 | 字段命名非标准(如"项目"而非"PROJECT") | 在正则模式中追加中文别名;改用专业版的自适应标题栏识别 | 高 |
| 尺寸数明显偏少 | 图纸为图片型PDF,无文本层 | 先用OCR工具转为文本型PDF | 高 |
| 比例识别为1.0 | 标注格式非标准或为NTS | 检查图纸比例标注;NTS图纸比例无意义 | 中 |
| 表格解析为空 | pdfplumber未识别到表格 | 检查表格是否有边框;尝试调整提取参数 | 中 |
| 中文注释分类错误 | 注释为中英混合 | 当前版本主要针对英文注释;专业版支持中文注释分类 | 低 |
| 内存占用过高 | 图纸页数过多或含大图 | 拆分PDF为单页文件分别处理 | 低 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent平台内置LLM提供(默认GPT-4o-mini) |
| pdfplumber | Python库 | 必需 | pip install pdfplumber |
| Python 3.8+ | 运行时 | 必需 | 从python.org安装 |
本技能基于原始开源作品改进,保留原始版权声明:
本改进作品在原始作品基础上进行了深度差异化改造,包括但不限于:
原始MIT license允许使用、复制、修改和分发,需保留版权声明。本改进作品在保留原始版权声明的基础上添加自有署名,完全符合MIT license要求。
本免费体验版限制以下高级功能:
解锁全部功能请使用专业版:drawing-insight-pro
### 依赖详情
```bash
pip install pdfplumber
from drawing_insight import DrawingAnalyzer
analyzer = DrawingAnalyzer()
result = analyzer.analyze_pdf("A101_Floor_Plan.pdf")