图纸文本清洗器 (Drawing Text Cleaner)
执行指令 (Instructions)
第一步:确认输入文件
输入文件必须是 Markdown 文件(文件名通常以 分栏提取_ 开头)。
第二步:运行清洗脚本
执行以下命令:
python scripts/clean_drawing.py [分栏提取_XXX.md] --output [清洗结果_XXX.md]
不指定输出路径时,脚本自动在输入文件同目录生成 清洗结果_XXX_cleaned.md。
脚本将依次执行:
- 去噪过滤:按噪声模式列表过滤轴线号、图框字段、孤立尺寸数字、残留乱码等无效行
- 片段拆分:将上游按列合并的多片段行(以
|分隔)拆开,逐段独立处理 - 语义分类:将保留文本按正则规则归入 7 个分类(见下方分类说明)
- 去重归并:同一分类内完全相同的文本只保留一条
第三步:输出结构化文本
脚本输出包含以下信息头的 Markdown 文件:
> 输入行数:XXX | 去噪行数:XXX | 保留行数:XXX | 去噪率:XX%
随后按优先级顺序输出各分类内容:
| 分类标签 | 包含内容示例 | 对清单的价值 |
|---------|------------|------------|
| [图纸信息] | 结构设计总说明、梁平法施工图 | 定位图纸范围与楼层 |
| [设计总说明] | 项目概况、抗震等级、混凝土强度等级、 钢筋连接| 影响全局套价参数 |
| [材料强度] | C30、HRB400、M10 | 构件特征匹配必要条件 |
| [构件标识] | KL1(3) 300×500、KZ1 500×500 | 直接对应清单子目 |
| [配筋信息] | 4C20、C8@200、加密区 | 钢筋清单计量依据 |
| [标高尺寸] | ±0.000、层高=3300 | 辅助计算工程量 |
| [节点做法] | 锚固长度 laE、植筋要求 | 措施项目与特殊工艺 |
| [其他] | 无法归类的保留文本 | 人工复核 |
第四步:质量核查
完成清洗后,向用户报告去噪率。如去噪率 低于 40% 或 高于 85%,主动提示:
- 低于 40%:原始文本可能质量较好,或噪声规则覆盖不足,建议抽查
[其他]分类中的内容 - 高于 85%:过滤可能过激,建议检查
[构件标识]分类是否有漏判,确认关键构件标注未被误删
如用户确认有漏判,记录到本 Skill 的 NOISE_PATTERNS 或 CATEGORY_RULES 中进行迭代。
分类规则说明 (Classification Logic)
分类采用优先级从高到低的正则匹配,一条文本只归入第一个命中的分类。规则文件位于 scripts/clean_drawing.py 的 CATEGORY_RULES 常量中,可按项目需要扩展。
构件标识的识别依据平法标注规范(16G101系列):
- 梁:
KL、WKL、LL、AL、JL等前缀 + 编号 + 截面尺寸 - 柱:
KZ、GZ、YZ等前缀 + 编号 - 板:
LB、WB、DB等前缀 + 编号 + 板厚 - 墙:
YQ、AQ、JQ等前缀 + 编号 + 墙厚 - 基础:
JC、CT、DJJ、JZL等
使用示例 (Examples)
场景:上游已完成提取Markdown 文件,需要清洗后生成清单
# 第一步(已完成)
dxf-text-extractor skill
→ 生成 分栏提取_总说明.md(共 2300 行)
# 第二步(本 Skill)
python scripts/clean_drawing.py 分栏提取_2F_梁平法施工图.md
# → 生成 清洗结果_2F_梁平法施工图_cleaned.md(保留 420 行,去噪率 81.7%)
# 第三步
boq-generator skill
→ 生成 最终工程量清单.md,包含 150 条子目
常见问题 (Troubleshooting)
问题:关键构件标注(如 KL3)被误过滤,在输出中找不到
原因: 图纸中该构件标注与截面尺寸分在了两行,脚本单独识别 KL3 未能命中带截面尺寸的正则,若同时触发了噪声规则(如极短文本)则被误删。
解决: 在 CATEGORY_RULES 的构件标识 patterns 中补充仅含前缀+编号的宽松匹配:r'^(KL|KZ|LB)\d+',或降低噪声规则中单字符过滤的严格程度。
问题:去噪率只有 20%,输出仍然很庞杂
原因: 图纸中包含大量设计说明正文(长段文字),这些内容不触发噪声规则,会全部保留在 [设计总说明] 或 [其他] 中。
解决: 这属于正常情况,长段文字本身对清单有参考价值。可将 [其他] 中内容交给大模型做一轮摘要压缩,再送入 boq-generator。
问题:同一构件标注出现多次(如图纸有多张平面图)
原因: 脚本的去重是全局字符串精确匹配,如果同一构件在不同楼层有相同编号但不同截面,会被误判为重复而只保留一条。
解决: 先用 dxf-text-extractor 的 [图纸信息] 分类确认楼层边界,或在运行清洗前按图纸拆分输入文件。
Scan to join WeChat group