一种基于Python的特高压工程水保设计文档精准拆分方法转让专利

申请号 : CN202311314598.7

文献号 : CN117057312B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张莹李志斌胡博谭荣荣李洋谭继旭

申请人 : 北京洛斯达科技发展有限公司

摘要 :

本发明提供一种基于Python的特高压工程水保设计文档精准拆分方法,包括:1)关键字识别算法,实现所有杆塔或牵张场关键字精确读取;2)关键字汇总算法,形成关键字与页码的一一精确映射集合;3)文档精确拆分算法,将一一映射集合作为设计文档拆分标记,实现关键字和相应页面设计信息准确读取;4)文档输出算法,将拆分标记即杆塔编号或牵张场编号作为文件名对输出文档进行精准命名和输出保存;5)水保设计文档拆分插件,基于Python开发框架将上述算法进行封装,形成可执行水保设计拆分插件,可实现水保设计文档自动化拆分。该方法实现了特高压工程水保设计文档的高效拆分,使得数据处理过程更为简单便捷,大大降低了数据处理的成本。

权利要求 :

1.一种基于Python的特高压工程水保设计文档精准拆分方法,其特征在于,包括以下步骤

步骤1:对待拆分水保设计文档格式进行规范化,水保设计文档标准格式是PDF格式;

步骤2:基于关键字识别算法,逐页读取文档信息,自动判别文档中每页的杆塔编号或牵张场编号;

步骤3:基于关键字汇总算法,将所有文档中识别的杆塔编号或牵张场编号及其对应页码汇总为一一映射集合,作为文档拆分的依据;

步骤4:对一一映射集合进行数据分析,对杆塔编号或牵张场编号和相应文档页码映射汇总集合进行筛查,将含有相同编号关键字的映射集合进行合并,建立具有唯一杆塔编号或牵张场编号与页码的一一对应集合,作为文档拆分标记;

步骤5:通过文档精确拆分算法,基于杆塔编号或牵张场编号一一映射集合,精准读取每个编号对应的原输入PDF文档设计信息;

步骤6:通过文档输出算法,将精确拆分的文档逐一输出,并将拆分标记即杆塔编号或牵张场编号作为文件名对输出文档进行命名,所有文件输出到同一个文件夹里有序显示;

步骤7:基于Python开发框架,形成水保设计文档拆分插件,用于信息的输入和输出;

所述的关键字识别算法如下:

步骤2.1:在Python开发环境中读取每基杆塔或牵张场的设计表格信息,以list列表格式存储,多层嵌套,数据格式如下:data=list[[[x1,x2,…,xn],[y1,y2,…,yn],…,[z1,z2,…,zn]],[[m1,m2,…,mt],[p1,p2,…,pt],…,[q1,q2,…,qt]],…… ……,

[[f1,f2,…,fs],[g1,g2,…,gs],…,[h1,h2,…,hs]]]其中,data是三维列表格式数据,每一维度的元素个数不同,存储了输入设计文档中单个杆塔或牵张场的设计信息;list是数据格式,表示列表;xn,yn,zn,mt,pt,qt,...,fs,gs,hs是单个杆塔或牵张场设计信息中的子元素信息,是字符串str格式;n,t,...,s是同一维度上元素个数;

步骤2.2:将每个杆塔或牵张场的data信息,转化为一维列表list,杆塔或牵张场的编号存在于字符串元素x1或x2中:data_new=list[x1,x2,…,xn,y1,y2,…,yn,…,z1,z2,…,zn,m1,m2,…,mt,p1,p2,…,pt,…,q1,q2,…,qt,…… ……,

f1,f2,…,fs,g1,g2,…,gs,…,h1,h2,…,hs]其中,data_new是一维list格式数据,存储了单个杆塔或牵张场的设计信息,是有变量data中数据转化而来;xn,yn,zn,mt,pt,qt,...,fs,gs,hs是单个杆塔或牵张场设计信息中的子元素信息,是字符串str格式;x1,x2是杆塔或牵张场设计信息的前2个子元素;

步骤2.3:在x1,x2字符串中带有明显的“杆塔号”或“牵张场编号”关键字符,基于这些关键字符构建多层级关键字符条件搜索方法,即可得到每基杆塔或牵张场编号,具体算法如下:m={x1,x2}.rfind(″keyword″)

target_Number[1,2,…,u]=[v1,v2,…,vu]其中,m是返回关键字符keyword在设计信息子元素x1或x2中最后一次出现的位置,即杆塔或牵张场编号起始位置;keyword是关键字杆塔或牵张场;target_Number[i]是list格式变量,存储待拆分设计文档提取的杆塔编号或牵张场编号vi,vi是第i个杆塔或牵张场编号,u是设计文档中所有杆塔和牵张场的总数,‘0’表示设计文档中该页无编号信息,{x1,x2}[m:]是子元素x1或x2提取的杆塔编号;rfind为Python中寻找关键字keyword的函数;if是条件函数;

所述的关键字汇总算法如下:

基于Python中的字典dictionary数据类型,逐个遍历设计文档关键字target_Number中元素,利用dictionary数据类型,构建每个杆塔或牵张场编号vi与对应所有页码的精准映射集合,作为文档拆分的精准拆分标记,具体算法如下:Pages_Number=dict{Pages_Numberi,…,Pages_Numberj,…,Pages_Numberm}Pages_Numberj=dict{vi:[loc(vi),loc(vi+1),…,loc(vi+n)]},if vi,vi+n+1≠′0′其中,Pages_Number是dictionary数据类型,是设计文档中所有杆塔和牵张场编号与所属文档页码的一一对应集合;Pages_Numberj是编号vi在列表target_Number[1,2,...,u]中对应的编号位置[loc(vi),loc(vi+1),...,loc(vi+n)],编号vi=vi+1=...=vi+n,n是target_Number[1,2,...,u]中相同编号的总数;dict是Python中字典dictionary数据类型标记;

所述文档精准拆分算法如下:

根据Pages_Numberj中的数据,读取设计文档PDF中的杆塔编号vi对应的所有页面内容[loc(vi),loc(vi+1),...,loc(vi+n)],具体算法如下:pdfj=PdfFileReader(loc(vi),loc(vi+1),…,loc(vi+n))其中,pdfj是读取的编号vi对应的所有设计信息,pdfFileReader()为Python中读取设计文档内容的函数。

2.根据权利要求1所述的一种基于Python的特高压工程水保设计文档精准拆分方法,其特征在于,所述文档输出算法:

将获取的单个杆塔或牵张场vi设计信息pdfj,存储为新的PDF文档,并以编号vi命名:PdfFileWriter(pdfj,name=vi)

其中,pdfFileWriterO为Python中保存为PDF文档的函数,j是第j个杆塔或牵张场编号。

3.根据权利要求1所述的一种基于Python的特高压工程水保设计文档精准拆分方法,其特征在于,所述水保设计文档拆分插件具有方便的数据输入输出界面,界面是利用Python提供的PySimpleGUI、PyInstaller开发包实现,其中,PySimpleGUI是Python程序界面开发包,提供的功能设计了拆分插件的简易界面;PyInstaller是Python提供的可执行程序生成包,功能将程序算法和程序界面打包成拆分插件可执行程序。

说明书 :

一种基于Python的特高压工程水保设计文档精准拆分方法

技术领域

[0001] 本发明涉及输变电工程信息数字化领域,尤其涉及一种基于Python的特高压工程水保设计文档精准拆分方法,实现原始设计文档的精准拆分、准确命名,实现简单便捷、自动化的数据精准处理,提高数据处理的效率。

背景技术

[0002] 特高压工程建设规模大、输送距离长,涉及数千基塔的设计和规划,涉及大量的规划资料数字化管理。其中,水保设计资料需要依托数字化的管控平台,以每基杆塔或牵张场为单位进行各个管理。然而,水土保持设计资料常按标段或省段进行出版,传统常采用人工手动拆分成单个杆塔,或者利用电脑提供的便捷命名、自动拆分的常规化工具处理。然而,手工拆分常涉及大量的人工操作;而电脑提供常规化工具只能将文件逐页拆分、按编号次序命名,后再逐个检查是否拆分正确,是半自动的拆分方法,难以根据需求实现完全的自动化。因此,需要一种新的水保设计文档拆分方法和便捷工具,以实现设计资料按每基杆塔或每个牵张场自动化精准拆分、精准命名。

发明内容

[0003] 本发明针对特高压工程水保设计资料传统拆分花费人工量大、自动化程度低的问题,提供一种基于Python的特高压工程水保设计文档精准拆分方法,可实现水保设计文档按每个塔或牵张场自动化精准拆分,精准命名,提高数据处理效率。
[0004] 本发明主要技术方案步骤如下:
[0005] 步骤1,对待拆分水保设计文档格式进行规范化,水保设计文档标准格式是PDF格式,作为输入文档;
[0006] 步骤2,基于关键字识别算法,逐页读取文档信息,自动判别文档中每页的杆塔编号或牵张场编号,得到文档中包含的所有编号信息作为关键字;
[0007] 步骤3,基于关键字汇总算法,将所有文档中识别的杆塔编号或牵张场编号及其对应页码汇总为一一映射集合,作为文档拆分的依据;
[0008] 步骤4,对一一映射集合进行数据分析,对杆塔编号或牵张场编号和相应文档页码映射汇总集合进行筛查,将含有相同编号关键字的映射集合进行合并,建立具有唯一杆塔编号或牵张场编号与页码的一一对应集合,作为文档拆分标记;
[0009] 步骤5,通过文档精确拆分算法,基于杆塔编号或牵张场编号一一映射集合,精准读取每个编号对应的原输入PDF文档设计信息,实现对水保措施设计PDF文档精确拆分;
[0010] 步骤6,通过文档输出算法,将精确拆分的文档逐一输出,并将拆分标记即杆塔编号或牵张场编号作为文件名对输出文档进行命名,所有文件输出到同一个文件夹里有序显示,便于进一步的应用;
[0011] 步骤7,基于Python开发框架,将关键字识别算法、关键字汇总算法、文档精确拆分算法及文档输出算法进行封装,并设计相应的可视化界面,形成水保设计文档拆分插件,用于信息的输入和输出。
[0012] 在本发明的一个实施技术方案中,所述步骤2关键字识别算法如下:
[0013] 水保设计文件中,包括杆塔和牵张场两种对象设计信息,每基塔或牵张场的设计信息是以表格形式记录,表格中含有塔基或牵张场编号信息,为了准确拆分PDF,并准确命名,需准确提取每基塔或牵张场编号信息,并记录其所在原始输入设计文档的页码位置信息。
[0014] 但是由于水保设计文件是由不同设计院设计,不同设计院PDF设计信息存储显示格式不同,且同一设计院提供的PDF杆塔或牵张场的格式存储显示亦不相同,为准确提取不同存储格式的设计文档中杆塔编号或牵张场编号的算法步骤如下:
[0015] 步骤2.1,在Python开发环境中读取每基杆塔或牵张场的设计表格信息,一般以list列表格式存储,多层嵌套,数据格式如下:
[0016]
[0017] 其中,data是三维列表格式数据,每一维度的元素个数不同,存储了输入设计文档中单个杆塔或牵张场的设计信息;list是数据格式,表示列表;xn, yn, zn, mt, pt, qt, ...,fs, gs, hs是单个杆塔或牵张场设计信息中的子元素信息,是字符串str格式;n, t, ...,s是同一维度上元素个数;
[0018] 步骤2.2,将每个杆塔或牵张场的data信息,转化为一维列表list,杆塔或牵张场的编号存在于字符串元素x1或x2中:
[0019]
[0020] 其中,data_new是一维list格式数据,存储了单个杆塔或牵张场的设计信息,是有变量data中数据转化而来;xn, yn, zn, mt, pt, qt,  ...,fs, gs, hs是单个杆塔或牵张场设计信息中的子元素信息,是字符串str格式;x1,x2是杆塔或牵张场设计信息的前2个子元素;
[0021] 步骤2.3,在x1,x2字符串中带有明显的“杆塔号”或“牵张场编号”等关键字符,基于这些关键字符构建多层级关键字符条件搜索方法,即可得到每基杆塔或牵张场编号,具体算法如下:
[0022]
[0023] 其中,m是返回关键字符keyword在设计信息子元素x1或x2中最后一次出现的位置,即杆塔或牵张场编号起始位置;keyword是关键字杆塔或牵张场;target_Number[i]是list格式变量,存储待拆分设计文档提取的杆塔编号或牵张场编号vi,vi是第i个杆塔或牵张场编号,u是设计文档中所有杆塔和牵张场的总数,‘0’表示设计文档中该页无编号信息,{x1,x2}[m:]是子元素x1或x2提取的杆塔编号;rfind为Python中寻找关键字keyword的函数;if是条件函数。
[0024] 在本发明的一个实施技术方案中,所述步骤3的关键字汇总算法主要包括以下内容:
[0025] 将关键字识别算法模块提取到的每个杆塔编号或牵张场编号及对应页码汇总为一一映射集合,作为文档拆分的精准拆分标记,水保设计文档拆分过程中每个杆塔或牵张场设计信息可能是单页或多页,需将每基塔对应的设计页和其它页精准区分,即杆塔编号和页码的映射集合是一对一或者一对多的关系,获取精确映射集合的方法如下:
[0026] 而关键字识别算法模块获取的target_Number[v1, v2, ...,vu]变量中的元素和设计PDF文件页码[1, 2, ...,u]是一一对应的,但是vi或vj可能是重复的,基于Python中的字典dictionary数据类型,逐个遍历设计文档关键字target_Number中元素,利用dictionary数据类型,构建每个杆塔或牵张场编号vi与对应所有页码的精准映射集合,作为文档拆分的精准拆分标记,具体算法如下:
[0027]
[0028] 其中,Pages_Number是dictionary数据类型,是设计文档中所有杆塔和牵张场编号与所属文档页码的一一对应集合;Pages_Numberj是编号vi在列表target_Number[1, 2, ...,u]中对应的编号位置[loc(vi), loc(vi+1),  ...,loc(vi+n)],编号vi=vi+1=...=vi+n,n是target_Number[1, 2, ...,u]中相同编号的总数;dict是Python中字典dictionary数据类型标记。
[0029] 在本发明的一个实施技术方案中,所述步骤5文档精准拆分算法如下:
[0030] 根据Pages_Numberj中的数据,读取设计文档PDF中的杆塔编号vi对应的所有页面内容[loc(vi), loc(vi+1), ...,loc(vi+n)],具体算法如下:
[0031]
[0032] 其中,pdfj是读取的编号vi对应的所有设计信息,pdfFileReader()为Python中读取设计文档内容的函数。
[0033] 在本发明的一个实施技术方案中,所述步骤6文档输出算法如下:
[0034] 将获取的单个杆塔或牵张场vi设计信息pdfj,存储为新的PDF文档,并以编号vi命名:
[0035]
[0036] 其中,pdfFileWriter()为Python中保存为PDF文档的函数,j是第j个杆塔或牵张场编号。
[0037] 在本发明的一个实施技术方案中,所述步骤7水保设计文档拆分插件具有方便的数据输入输出界面,界面是利用Python提供的PySimpleGUI、 PyInstaller开发包实现,其中,PySimpleGUI是Python程序界面开发包,提供的功能设计了拆分插件的简易界面;PyInstaller是Python提供的可执行程序生成包,功能将程序算法和程序界面打包成拆分插件可执行程序,形成简单便捷的数据输入输出界面,方便不同基础人员使用。
[0038] 本发明的技术方案至少包括以下有益效果:
[0039] 与现有人工拆分或半自动拆分相比,本方案以特高压水保设计文档应用目标为基础,构建了文档的自动精准拆分算法,并基于Python开发环境研发了简单便捷的文档拆分插件。水保设计精准拆分算法确保了每个杆塔或牵张场设计信息不被遗漏;遍历水保设计文档每页的信息内容进行分析标记,确保每个杆塔或牵张场对应设计信息被准确划分到所属杆塔或牵张场,为精准划分的实现设计了精确的算法模型,从而保证了设计文档的精确划分,达到精准拆分的目标,提高了设计文档拆分的精准性。
[0040] 相交于传统手动拆分,或半自动拆分的方法,本发明减少了人工投入,显著提高了文档的拆分效率、精确性、自动化程度,达到了精准拆分、精准命名、完全自动化的目标。

附图说明

[0041] 以下将结合附图对本发明的实施方案进行描述,其中:
[0042] 图1是基于Python的特高压工程杆塔水保设计文档自动精准拆分流程图;
[0043] 图2是本实施例提出的水保设计文档拆分插件主界面;
[0044] 图3是待拆分文档“一塔一图.pdf”中编号2的杆塔设计页(单页设计信息结构);
[0045] 图4是待拆分文档“一塔一图.pdf”中编号3的杆塔设计页(双页设计信息结构);
[0046] 图5是拆分文档“一塔一图.pdf”及其拆分后的所有文档。

具体实施方式

[0047] 本发明是一种基于Python的特高压工程水保设计文档精准拆分方法,根据应用需求和目标基础上,提出拆分方法,结合Python开发框架的算法开发和界面开发的优势研发了插件,实现了设计PDF文档的精准拆分和命名。为展示本发明的技术方案和优点,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
[0048] 如图1至图5,实施例的具体方案流程包括如下步骤:
[0049] 步骤1:打开水保设计文档拆分插件,运行数据处理的交互界面,如图2;
[0050] 步骤2:通过文件选择的方式将需要拆分的设计PDF文档加载,并选定数据输出的位置,如图2,界面“输入设计文件”选项加载待拆分文件“一塔一图.pdf”(如图5),“一塔一图.pdf”文档共221页,包含162基杆塔和20个牵张场的设计信息页,图3和图4分别展示了编号2、3杆塔的设计页面信息,塔2仅有1页的设计信息,在“一塔一图.pdf”文档的第3页(图3);塔3对应2页的设计信息,在“一塔一图.pdf”文档的第4和5页(图4),界面“输出文件夹”指定拆分文件的输出位置(默认与输入文件同一文件夹);
[0051] 步骤3:通过界面“确定”按钮,即可运行程序,对输入数据进行处理,自动保存结果到指定文件夹;
[0052] 步骤4:待拆分水保设计文档加载后,自动进入“关键字识别模块”,该模块识别出整个设计文档的编号,如图3中的塔位号“2”,图4中的塔位号“3”;
[0053] 步骤5:整个文档编号识别出后,自动进入“关键字汇总模块”,将每个杆塔编号或牵张场编号及对应页码汇总为编号唯一的一一映射集合,作为文档拆分标记,如{‘塔位号:2’, [3]},{‘塔位号:3’,[4,5]};
[0054] 步骤6:一一映射集合进入“文档精准拆分模块”,将从原始输入设计PDF文档中,提取‘塔位号:2’对应的第3页的设计信息;提取‘塔位号:3’对应的第4和5页的设计信息;
[0055] 步骤7:信息读取后,进入“文档输出模块”,将读取的‘塔位号:2’对应的第3页的信息自动保存,并以‘2.pdf’命名,如图5;‘塔位号:3’对应的第4和5页信息自动保存,并以‘3.pdf’自动命名,如图5;实现了精准拆分和精准命名保存。
[0056] 如图5所示,最终实现了“一塔一图.pdf”设计文档精准拆分、精准命名,获得单独的162基杆塔设计文件和20个牵张场设计文件,并以其编号命名。
[0057] 由于水保设计文件是由不同设计院设计,不同设计院PDF设计信息存储显示格式不同,且同一设计院提供的PDF杆塔或牵张场的格式存储显示亦不相同,传统手工或半自动拆分,每个设计文档涉及几百基塔,甚至上千基塔,需大量时间处理,易出错。
[0058] 另外,拆分过程中每个杆塔或牵张场设计信息可能是单页或多页,易丢失地形页信息。本发明的关键字识别算法、关键字汇总算法可识别文档中每基编号,且精准读取编号对应的设计信息,自动以编号命名。基于这些算法,通过Python环境研发了简单便捷的交互界面,实现了设计文档的精准拆分、精准命名、完全自动化处理的目标,提高了数据的处理效率,使得特高压水保设计文档拆分更为简单便捷。