APP下载

供应商投标文件关键信息数据自动提取方法

2024-04-11袁建邸智郑子辰贾家琛

中国管理信息化 2024年1期

袁建 邸智 郑子辰 贾家琛

[摘 要]本论文研究智能招投标系统中针对供应商投标PDF电子文档的信息提取技术。研究内容包括PDF文本信息提取和表格提取中的表格结构还原和数据对齐问题。通过设计并实现相关功能和算法,包括软件架构、内容解析器类算法、文本提取模型和表格提取模型,实现了自动识别和提取关键信息并保存到数据库中。此外,将OCR技术与信息提取技术相结合,解决了扫描PDF文件的识别和提取问题,提高了文本和表格信息的完整性和准确性。本论文的研究成果对于存档历史投标文件的快速处理和专家评标过程中的信息提取具有重要意义,为智能招投标系统的进一步发展提供了支持。

[关键词]智能招投标系统;供应商投标;PDF电子文档;信息提取技术;非结构化文档

0     引 言

智能招投标系统在运行期间积累了数万份历史投标电子文档,主要以PDF等非结构化形式存储在数据仓库中。这些文件中包含了大量有价值信息,由于非结构化文档的局限性,无法直接对其进行分析及应用,需要先进行结构化处理,从中提取关键信息数据。

供应商投标文件分为商务文档、技术文档和价格文档。结构化处理主要从文档中提取供应商基础信息、财务、业绩及详细报价等数据。投标文件动辄成百上千页,这些信息数据又以不同形式存在于段落、表格、图像中,研究投标文件关键信息快速定位和提取,对存档历史投标文件批量快速处理及专家评标过程中及时过滤出有效信息数据均具有重要现实意义。

1     绪 论

1.1   研究背景

智招系统中供应商投标文档主要为PDF文件,PDF(Portable Document Format,便携式文档格式)是由Adobe Systems于20世纪末开发的用于文件交换的一种文件格式,在设计之初主要是为了能够在多个设备中进行相同格式的渲染,并没有针对一般数字文档的表格、段落等格式进行特别的设计,这导致一份PDF文档内部并没有包含版面上的物理结构和内容的逻辑结构,只是单纯的线条与文字的集合,因此识别和提取PDF中复杂的文本、表格数据面临不小的挑战。

1.2   研究现状

许多学者对通用PDF文件信息数据提取进行了一些研究。赵婉婧等人[1]提出一种基于PDF版式特征的文献篇章结构细粒度自动抽取方法,根据章节标题的坐标定位,将正文内容以段落为最小颗粒度自动匹配至所属标题的下级位置,最终实现文档全文结构的细粒度抽取和重组。王淼等人[2]提出了一种文本相似度算法基本步骤和文档整体相似度加权平均方法,但该研究只进行了文本处理,无法处理存在扫描页的文件,而在实际投标文件中存在大量的扫描版内容。

针对PDF中的表格数据,唐锐等人[3]分析有关 PDF表格抽取技術的学术文献,总结出PDF表格抽取的三种思路,从算法构建的特征的角度对主要的表格抽取算法进行分类,并分析算法各自的特点和优劣。

田翠华等人[4]针对PDF中不同表格的结构设计算法,识别表格内的文字信息与表格结构,将得到的表格结构还原至Word与Excel文档中,文字信息同样复原至对应单元格内。

针对PDF中的图像数据,陈毅铧等人[5]针对文档图像查重、以图搜索文档等应用对于文档图像提取的需求,归纳和总结PDF文档图像的提取方法,从文件结构出发,定位并提取出图像数据,然后将数据保存成指定格式的图像。

1.3   研究内容

本论文主要研究针对供应商投标PDF电子文档,根据关键信息特征进行PDF文本信息提取、表格信息提取,OCR辅助文本表格信息提取及数据整合等相关技术。

首先,对以上内容中所涉及的技术关键点进行归纳总结,并针对PDF文本关键信息提取,表格提取时表格结构的还原和数据对齐等问题提出解决方案。

其次,对涉及的相关功能及算法进行了详细设计以及实现。包括设计并实现软件架构、算法等。针对实际需求目标,设计了内容解析器类算法,以及基于该算法的文本提取模型和表格提取模型。提取模型能够自动识别并提取文件中的关键文本信息,表格提取模型能够自动识别提取关键表格,并自动以结构化格式保存到相应数据库中。

最后,针对PDF文档中的扫描图像,将OCR技术与现有的PDF文档信息提取技术相结合,实现了扫描PDF文件的识别和提取。扫描PDF文件在提取过程中会遇到文字识别效率低下、错误率高的问题,并且难以格式化处理。针对以上问题,本文采用OCR技术辅助文本表格信息提取,设计并实现了表格OCR提取转化算法和表格合并组合算法,同时还实现了文本信息缺省值补充等功能,提高了文本、表格信息的完整度和精确性。

整体流程如图1所示。

1.4   研究目的

对智能招投标系统中的历史投标PDF电子文档进行结构化处理,提取挖掘原文件中的关键信息。通过模型和算法的设计和实现,达到快速定位和提取投标文件中的关键信息数据,提高存档历史投标文件的处理效率及信息数据提取准确性的目的。

2.1   PDF文本信息提取模型设计

PDF文本信息提取模型主要包含以下三个方面的解决方案:PDF文本转换、关键信息提取和文本信息自动入库。整体流程如图2所示。

首先,pdfplumber调用open函数读取PDF文件,

然后选取文件的pages对象,再调用page的extract_text()方法(或者OCR方法)提取文档中的文字。随后,程序会首先判断每一页的原始文本中是否存在关键信息,若存在则进一步进行提取,否则无需提取。其次,针对不同类别的关键信息,程序也会有不同的提取策略。

对于日期、编号等主要以数字字母等简单字符组合的文本,程序采用正则匹配法,事先编写正则规则,然后对文本直接进行正则匹配提取匹配到的关键信息。例如营业执照号码,采用的正则规则是"[93]1[0-9]{2}[0-9A-Za-z]{14}"。

对于姓名、名称等主要以汉字组合的文本信息,程序采用关键词匹配法,即搜索文本中是否存在关键词信息。在发现关键词的情况下,程序会获取关键词附近的文本,并认为之中大概率存在关键信息。然后程序对后者进行进一步处理,包括分词、去除停用词等一系列操作,最终依据预设的提取策略提取需要的词作为关键信息。

最终,程序会将提取到的关键词和关键信息先保存在列表之中,然后在数据库中根据关键词建立数据库字段,关键信息则作为数据库值和对应的数据库字段直接建立匹配关系。最后按照该匹配关系将列表存储到数据库中。

2.2   PDF表格信息提取模型设计

PDF表格提取模型主要包含以下三个方面的解决方案:PDF表格提取、表格简化和表格自动入库。整体流程如图3所示。

与PDF文本信息提取过程类似,程序会根据事先设定好的关键词进行判断当前页面中是否存在关键表格,若存在则进行表格提取。Pdfplumber使用page对象的extract_tables()方法进行表格提取,但是此时提取出来的表格不是标准表格,在经过提取单元格、分离子表、拆分合并单元格、提取表头并化简、合并跨页表、转置、重新封装等一系列操作之后,才能化为标准表格。

(1)提取单元格:extract_tables()方法可以识别单元格分隔符进行单元格的识别和抽取,得到结构为“表->行->单元格“的列表形式。

(2)分离子表:pdfplumber提取到的单元格包含x0、x1、top、bottom等位置信息而不包含文字信息,因此程序会将页面上的文字信息依据绝对坐标转化为相对位置关系,然后根据从左到右,从上到下的顺序重新表格排序

(3)拆分合并单元格:重新排序的单元格对象并没有表格的基本特征,因此需要根据表格位置对其进行划分,将属于同一个表格的单元格划分在同一个表格容器中。

(4)提取表头并化简:程序假定表格的第一行非空行或第一列非空列为表头,因此提取表头时候只需要对第二行和第三行以及第二列和第三列的数据进行相似度比较,即可判断表格是以横向还是纵向排列。

(5)合并跨页表:若判断表格是否跨页,则需要判断前后表格的列数和宽度是否相同以及后页表头是否存在。然后将属于跨页表格的列表进行合并。

(6)转置:商业表格通常来说第一列或者第一行为年份数据,为了保持数据库中表格结构的一致性,需要将第一行为年份数据的表格转置。做法为利用zip()函数将列表转置。

2.3   软件架构及算法设计

本软件设计了三层架构,分别是展示层架构,逻辑层架构和数据层架构。系统架构如图4所示。

2.3.1   展示层

展示层主要用于展示数据和显示处理结果,提供用户交互界面。该软件主要采用Flask框架实现,利用浏览器访问链接:端口提供主体界面。利用Flask控件和HTML文件展示PDF文件信息、关键文本信息、关键表格的输出结果,还能根据用户需要选择目标PDF文件进行解析。

2.3.2   逻辑层

逻辑层主要包括实现各个功能模块中定义的各个功能,接收展示层传来的目标PDF文件地址,解析并将结果传递给展示层和数据层,起到连接的作用。在本软件中,逻辑层主要是通过Python语言编写以及使用多个Python依赖包辅助完成,实现PDF关键信息提取从开始到入库的全部算法流程。除此以外,逻辑层还负责HTML文件的维护和生成,为展示层提供后台支持。

2.3.3   数据层

数据层主要是数据长久化保存以及向展示层和逻辑层提供数据支持,包括待处理的PDF文件和处理后的MySQL数据库文件。每一个PDF文件会在MySQL的表中生成一个唯一ID,用于在不同数据库中索引。处理完成的PDF文件会在数据库中得到记录,同时会标明对应的包含的表格和字段。

2.4   算法设计

软件算法主要包括提取关键文本信息算法和提取关键表格算法。

2.4.1   算法1

算法1为关键文本信息提取算法,其中使用的正则匹配法为事先编写的正则匹配规则去匹配整体文本。例如日期则正则编码为u"[0-9]{4}[ ]*[年][ ]*[01]?[0-9][ ]*[月][ ]*[0123]?[0-9][ ]*[日]",

可以精确匹配日期信息。而对于例如名称这种关键信息,除了使用正则编码“[名称]”以外,还需要通过收集关键词附近的文字,采用Python中文分词组件jieba后,去除例如“是”“的”等冗余中文连接词和事先确定的词语后将剩余詞汇连接便可以得到关键信息。具体的算法流程如下。

算法1:关键文本信息提取算法。

输入:PDF文件地址并用pdfplumber处理得到pages对象。

输出:将处理过的文本信息通过SQL语言存入数据库。

①使用extract_text()方法得到page的文本信息,以列表形式表示;

②(可选)将该页page通过fizt.get_pixmap()得到该页的图像格式文件,对图像进行灰度化、二值化和边缘提取处理,利用霍夫变换计算图像直线斜率而后进行倾斜校正;

③(可选)对图像文件使用OCR技术获取图像上的文字及其位置信息,处理后与②中列表信息格式相同,然后与②中得到信息合并;

④通过正则匹配法判断该页文本信息中是否含有关键信息;

⑤如果有,则将关键信息附近文本收集并采用中文分词,清理掉不需要的文字之后获取关键文本;反之则返回②并选择下一页;

⑥将处理过的文本以{关键词:关键信息}形式为键值对保存在字典中,然后返回②并选择下一页直到处理完成所有页。

2.4.2   算法2

算法2为基于pdfplumber的关键表格信息提取算法。本算法在pdfplumber的基础上解决了部分pdfplumber处理过程中遇到的问题,包括但不限于数据清洗、子表清理、合并跨页表等方法,其中通过关键词判断是否为关键表格使用了算法1的部分步骤,而④至⑦步则为方法的具体操作步骤。具体的算法流程如下。

算法2:基于pdfplumber的关键表格信息提取算法。

输入:PDF文件地址并用pdfplumber处理得到pages对象。

输出:将表格内容通过SQL语言存入数据库。

①使用算法1的②至⑤步骤判断该页是否存在表格标题,是否是关键表格;

②如果有,使用算法1的步骤⑥获取表名,使用extract_tables()方法提取table,并提取到单元格信息;

③数据清理,重新创建一个列表,然后将table按照行顺序置入列表内,并为空白单元格添加空值以保证表格每行的维度相同;

④子表清理,遍历列表获取列数最多的行列数,若其他行列数少于该行,则认为是子表,然后根据位置信息判断子表单元格与主表单元格的对应关系,然后通过对应关系扩展改行使得函数保持一致;

⑤合并跨页表,通过extract_tables()方法提取下一页的表格并选择第一个表格,若表格的第一行与前一页最后一个表格的最后一行列数相同,且不包含表头关键词,则对后表进行④至⑤步处理并与原表数据合并;

⑥判断转置,选择table[0]作为表头,如果表头中文本为年份信息,则将列表转置。

2.4.3   算法3

算法3为基于OCR的关键表格信息提取算法。利用腐蚀膨胀算法获取图像横、纵线,从而获取单元格坐标信息。利用角点检测方法判断表格边界位置以及表格数量。由于OCR只能提取文本信息,因此提取成表格形式难度较大。但是通过借助图像处理方法得到的位置信息去判断文本之间的相互关系,包括行、列的归属判断和单元格因为换行导致文字分开的情况,可以与OCR技术形成有效互补。而利用OCR判断位置信息处理完成后,文本将被重新以表格形式排列,之后使用算法2的步骤处理。具体的算法流程如下。

算法3:基于OCR的关键表格信息提取算法。

输入:输入PDF文件地址并读取,遍历页并使用fizt.get_pixmap()得到该页的图像格式文件。

输出:根据算法2步骤④至⑧处理剩余表格文本信息。

①图像处理,对图片进行灰度化、二值化和边缘提取处理,利用霍夫变换计算图像直线斜率而后进行倾斜校正;

②使用Harries角点检测方法提取图像中的角点作为表格的边界角点,并根据①中获得的直线信息获取表格边界,然后分离图像中可能存在的多个表格并处理非表格部分信息;

③单元格提取,使用图像腐蚀膨胀技术提取表格横、纵直线,直线相交形成区域为单元格区域,获取坐标(x_l,x_h,y_l,y_h);

④使用OCR技术提取每个单元格的文本信息;

⑤计算每个单元格中心点坐标x=(x_l+x_h)/2,

y=(y_l+y_h)/2,若两个单元格中心点横坐标相同,则认为属于同一列,若纵坐标相同,则属于同一行;

⑥获取表头信息,根据中心点坐标信息,获取第一列或者第一行的文字,根据算法2步骤⑥判断表头并确认是否转置。

3     实验分析

3.1   实验与开发环境

本次实验所涉及的软件和硬件信息如表1所示。

3.2   实验数据

本系统对100多份商业PDF文档进行内容提取。从内容上,分为文本提取和表格提取;从形式上,分为直接提取与OCR辅助提取。本文选取了大小不同的PDF文档,并有针对性地选取带有表格内容的PDF文件以供测试。其中,对于文本提取的准确率计算如下:

其中i为文本提取关键词,count()表示满足条件的文档数量。

对于表格提取准确率计算如下:

其中t为对应某个表格中的某个单元格,count()表示满足条件的单元格数量,该式计算单个表格提取的准确率,对于整个文档,则计算表格的准确率的均值作为比较标准。

3.3   软件测试与分析

软件通过对多组不同的测试数据进行测试,分别对软件提取PDF文件所用时间进行統计,统计结果如表2所示。

其中,OCR使用情况包含三种,分别为未使用OCR方法、仅使用OCR方法和辅助使用OCR方法,辅助使用指的是若常规方法未有效提取出文本关键词或表格关键信息,则使用OCR方法提取,否则则不使用。

从表2可以看出,文档数据信息提取所用时间与文档大小相关性较低,与OCR是否使用相关性较大,在不使用OCR技术的情况下,提取能在10s内完成,符合基本要求,但在仅使用OCR的情况下,提取数据所用时间超过100s,明显不符合要求。在辅助使用OCR的情况下,提取速度相比只使用OCR的情况要快。

本系统还对多组不同的测试数据进行准确率计算,计算结果如表3所示。

根据表3数据可知,仅使用OCR技术不能很好地提高准确率,这与PDF文件的清晰度、图片的污染程度、模型本身的识别准确率均相关。而OCR与基础方法配合使用能够明显提高准确率。在辅助使用OCR的情况下,提取的准确率约为99%,符合性能指标要求。

综上所述,未使用OCR情况下提取数据很快,但是准确率有所降低。辅助使用OCR情况下准确率最高,提取速度也基本满足要求。但是仅使用OCR情况下提取数据的速度和准确率均不符合要求,因此本软件应该采用辅助使用OCR的方式运行。

3.4   软件功能操作与实现

对于待提取PDF文件,将其文件路径输入至程序中便可自动提取,如图5(a)所示,在Web端可以顯示文本提取得到的关键词和关键信息,以及表格提取得到的表格。

对于扫描文件,如图5(b)所示,软件还会显示分割之后得到的表格图片。

4     结束语

本文设计并实现了PDF文件的商业信息数据提取整合软件,该软件借助pdfplumber和OCR方法实现了PDF文本数据和表格数据的提取。实验证明,采用本文设计的软件提取PDF文本和表格数据有较快的速度和较高的准确率,在实际操作过程中,建议采用以pdfplumber为主,OCR方法辅助的形式进行信息提取。

由于本文的研究目标具有较强针对性,对其他类型的PDF文件关注较少,对PDF文件中的图像或符号信息也有所忽略,在后续的研究中将对这些内容做进一步的研究。

主要参考文献

[1]赵婉婧,刘敏娟,刘洪冰,等.基于PDF版式特征的文献篇章结构细粒度抽取方法研究[J].农业图书情报学报,2021,33(9):93-103.

[2]王淼,朱宇龙,马博,等.基于文本挖掘技术的电力企业招投标智能审计探索与实践[J].中国管理信息化,2020,23(14):81-84.

[3]唐锐,邓建新,叶志兴,等.PDF文件的表格抽取研究综述[J].计算机应用与软件,2021,38(7):1-7,22.

[4]田翠华,张一平,胡志钢,等.PDF文档表格信息的识别与提取[J].厦门理工学院学报,2020,28(3):70-76.

[5]陈毅铧,张瀚匀.面向Word和PDF文档的图像提取软件

[J].信息技术,2023,47(4):8-12,17.

[收稿日期]2023-07-13

[作者简介]袁建(1980— ),内蒙古呼和浩特人,硕士,高级工程师,主要研究方向:大数据、区块链。