李旭葶
中国化学工程第四建设有限公司 湖南岳阳 414000
目前石油化工工厂的总体布局呈现大型化、区域化、集中化趋势,装置的电子版图纸作为现场施工依据之一,识读及汇总材料量是一项重要工作。根据图纸提供的材料数量,将其中的信息转换到Excel 表格中进行分类汇总、数值计算,可实现更加直观的数据处理。传统的拔量工作需要人工识读图纸,再录入到电脑中,效率低,准确性差。通过编程运行数行代码批量提取电子版图纸中的数据,将表格内容提取出来,对于节省人力、降低成本有一定的帮助,从而提高经济效益。
中国化学工程第四建设有限公司承建的某大型化工装置的工艺管道生产流程复杂,工艺连续性强,具有高温、高压、低温、易燃、易爆和腐蚀等特点,对管道材料检验、焊接、安装、压力试验等要求较高。施工图纸材料量大,材料种类多,其中仅管廊区一个区就有901 张图纸,全装置有近万张图纸。而且材料描述全部为英文,识读有一定的难度。图纸的形式以PDF 版和CAD 版为主,无法直接进行统计汇总。如果能从电子版图纸中提取出电子版材料表,汇总出材料清单,将有利于前期编制材料采购计划,对工程项目后续的领料工作、进度款申报及结算工作也有很大帮助。传统采用的人工拔量方式耗时久、准确率低,急需开发一种新型拔量方式。
PDF 是一种可移植文档,其与操作系统平台无关,也就是说,其在Windows、Unix 和Mac OS 操作系统中都是通用的。这一特征使它成为设计院出图的主要格式,CAD 格式也能轻易转换成PDF 格式。因此,新型的拔量方式针对PDF 文档格式而开发,具有较好的兼容性。该项目电子版图纸皆为PDF 格式,施工图纸中图片和文字交叠在一起,无法对图纸上的材料表直接操作。在PDF 右侧的区域有序排列着材料代码、规格及其他参数,但该PDF文档格式中并不存在表格内部分隔线,只有一个代表材料区域的的外框线。市面上的表格提取工具主要基于表格内部框线划分区域,对该项目的图纸完全无法识别提取表格。这种表格被称为“文字流”表格,而对于它的识别称为“基于文字流的表格识别”[1]。综合以上因素,对基于PDF文字流的无图像线表格识别技术进行了研究,设计并实现了一套表格批量提取方法。
传统拔量方法是人工识读图纸,手动录入材料名称和参数到电子表格,效率低下。继产生要研究新拔量方法的想法后,尝试逐文本块复制粘贴录入,整行复制录入乃至整列复制录入。虽然提高了一定的效率,人工参与的比例还是很大。在尝试了多种方式,不断吸取经验之后,逐渐梳理总结出了最终的功能实现流程。选择以按键精灵为平台开发拔量软件,优点在于不需要配置环境变量、构建工程、声明变量及数据比较时的类型转换,适合缺少编程经验的人使用,本质是基于VBA 编程语言对施工图纸进行拔量。首先获取整个图纸右侧材料表内容,继而转到Word 文档分析其排列规律以编写文本处理的功能代码。经分析,每一项材料都占据1—3 行的高度,各项内容都通过空格分割,首列序号数值都在一定范围内,每项材料的第2 行及以后只保留材料描述。根据这一规律结合编程语言的各种函数,将原始数据分割排序,在适当的位置插入制表格、换行符,通过剪切板中转数据,最后在excel 表格中以粘贴的方式输出最终结果。以上便是此次施工图纸表格的提取的思路,技术要点是使用编程方法对原始数据的整理及不同情况的分类讨论。功能实现的流程示意图见图1。
图1 功能流程示意图
软件实质是将人工重复性的动作让程序代为执行,比如排序换位,将对应内容插入制表位放到相应的单元格中和换行等操作。只需要把施工图纸的纯文本内容复制后导入到按键精灵,在按键精灵中经由编程方法完成识别、排版这一系列重复工作,再输入到Excel 表格中。
通过Acrobat PDF 编辑器提取出PDF 文档右侧的材料表,编辑器自带有批量裁剪全部页面功能。需要注意的是,在单页阅读模式下全选只能选中一页内容,然后用Ctrl+A 全选复制出PDF 文档文本层的内容。材料表中的文字属性,如图片和文字颜色、字号大小等在编程处理中属于无用参考,会降低程序运行效率,并可能对最后结果造成未知影响。因此,需要一些方法剔除这些无用属性,只保留纯文本部分,比如使用word 的仅粘贴数值格式,或者使用txt 文档中转也能达到一样的效果。
本软件没有制作复杂的数据导入界面,在算法中调用系统剪切板作为数据中转站,因此数据的导出导入通过快捷键Ctrl+C、Ctrl+V 实现,数据保存在剪切板中等待下一步处理。当剪切板数据就绪,运行搭载了本算法的按键精灵,根据数据大小,就可以在一定时间内将数据整理为标准的excel 表格数据,最终结果保存在剪切板,之前导入的原始数据将被覆盖。施工图纸中的原始材料数据经过本算法的处理,在其中插入了换行、分列、占位符号,调整顺序使之与材料表的单元格一一对应,最后使用Ctrl+V 能完成几百张图纸的拔量工作。
程序最初由于图纸样本少,只有一套装置的图纸,运行后生成的材料表存在少量问题。通过比对分析原始施工图纸和材料表的差异,发现是原本存放材料表的区域与轴测图重叠导致的。可以通过人工筛选得出工程量表中明显的异常,针对性地增加分类讨论,修改程序并调试验证。对于个性错误只能比对原图纸进行修改,并且这些个性错误都是PDF 源文档自身存在的错误,对拔量软件的改进帮助不大。随着样本规模的增加,拔量软件有了更好的适应性。目前拔量软件还存在不足,对于不同排列格式的PDF 图纸,只有数据传输框架可以继续使用,程序原始数据处理模块的就需要全部或者部分重新编程。初始考虑到开发难度和开发时效使用了按键精灵作为开发平台,存在程序执行效率低、体量大的缺点。未来会将算法移植到Python 平台上或主流的Java 平台,具有简单易懂的优点,程序的体积也可以减小很多。
该算法适用于PDF 文档格式无结构化信息的表格识别,创新之处在于识别过程不依赖任何表格框线信息。通过对文字的排列布局信息的分析,重新排列拼接原始数据,调整数据为可以粘贴到材料表的格式。软件如实完整地保存PDF 图纸的原始内容,具有较高的准确性。最重要的一点是解决了传统图纸拔量速度慢的问题,使拔量速度有了极大的提高。该拔量软件只要运行几分钟就可以把一份1000 页的图纸数据转换出来,加上裁剪文档,程序调试修改,不到30min 就可以完成平时人工拔量将近3d 的工作量。除了PDF 文档自身极少的错误,需要人为的干预修改,整个过程需要很少的操作,只要将图纸文本内容执行一次裁剪复制,然后交由拔量软件完成整理工作。相对于OCR 识别模糊查找的方法,这种直接对PDF 的原始数据进行编辑的方法,可以尽可能地减少最终结果的错误。
拔量软件的思想还可以应用到项目工作的其他方面,例如管道焊接无损检测需要重复地从焊接数据库复制数据到委托单中,可以编写自动化程序减轻个人负担。“诺必达焊接管理系统”就是一个很好的平台,它集成了各种有关管道焊接工作的自动化程序,很多功能简单几步操作就可以完成,是以后学习参考很好的例子。另外,像试压包的编制、交工资料的编制这种规模较大、重复性高的工作,都可以通过编程来完成,从而极大地提高工作效率。
通过编程来实现办公自动化可以大大提高工作效率,尤其是现在普遍采用计算机办公的时代,合理利用编程这项技术处理日常工作中的一些问题,可以达到事半功倍的效果。同时,要有认真负责的态度,对输出结果进行适当检查,万不可一劳永逸。