Преглед изворни кода

添加已标价工程量清单表格解析模块

sprivacy пре 1 година
родитељ
комит
4f802c4126
2 измењених фајлова са 594 додато и 3 уклоњено
  1. 34 3
      get_info.py
  2. 560 0
      table.json

+ 34 - 3
get_info.py

@@ -95,6 +95,9 @@ from pdfminer.pdftypes import (
     LITERALS_FLATE_DECODE,
 )
 
+import pandas as pd
+import pdfplumber
+
 
 def is_title(line: str) -> bool:
     title_word = re.findall('^[(\(][一二三四五六七八九十]+[\))]|^\d\.|^1\d\.|^2\d\.|^[第][一二三四五六七八九十\d]+[章节条]|[一二三四五六七八九十]+[、要是]', line.strip())
@@ -205,16 +208,44 @@ def main_parse(pdf_path: str, title_path: str, image_dir: str) -> None:
                         image_file = os.path.join(image_dir, f'image_page_{page_number}_{image_index}')
                         image_file = export_image(e_obj, image_file)
                         images.append(image_file)
-                        print(f'Image saved: {image_file}')
+                        pprint(f'Image saved: {image_file}')
                         image_index += 1
 
-    with open(title_path, 'a', encoding='utf-8') as fp:
+    with open(title_path, 'w', encoding='utf-8') as fp:
         json.dump(texts, fp, indent=4, ensure_ascii=False)
 
 
+def table_parse(pdf_path: str, title_path: str, start_title: str = '六、已标价工程量清单', end_title: str = '七、施工组织设计', table_path: str = 'table.json') -> list:
+    tables = []
+    df = pd.read_json(title_path)
+    start_page_number = df[df['text'] == start_title].pageno.max()
+    end_page_number = df[df['text'] == end_title].pageno.max()
+    pdf = pdfplumber.open(pdf_path)
+    for i in range(start_page_number, end_page_number):
+        table = pdf.pages[i].extract_table()
+        if table:
+            first = [''.join([i for i in cell.split() if i]) if cell else cell for cell in table[0]]
+            # pprint(first)
+            if len(set({'序号', '项目编码', '项目名称', '项目特征', '单位', '工程量', '全费用综合单价', '合价', '备注', '主材名称', '规格型号', '不低于下列同档次品牌', '投标选用品牌及规格型号', '名称', '事项', '数量', '含税单价(元)', '含税合价(元)'}) & set(first)) > 2:
+                # pprint("找到大量表头元素,判断为独立表头,生成新表!")
+                tables.append({"pagenos": [i], "title_len": len(first), "col_len": len(table[-1]), "table": table, "confidence": 1})
+            elif ((i-1) in tables[-1]['pagenos']) and (len(first) == tables[-1]['col_len']):
+                # pprint("有空列,不是单独表,直接合并")
+                tables[-1]['pagenos'].append(i)
+                tables[-1]['table'].extend(table)
+            else:
+                tables.append({"pagenos": [i], "title_len": len(first), "col_len": len(table[-1]), "table": table, "confidence": 0})
+
+    with open(table_path, 'w', encoding='utf-8') as fp:
+        json.dump(tables, fp, indent=4, ensure_ascii=False)
+
+    return tables
+
+
 if __name__ == '__main__':
     pdf_path = './投标文件-修改版9-5-1-1.pdf'
     title_path = './投标文件-修改版9-5-1-1.json'
     image_dir = './extracted_images'
     os.makedirs(image_dir, exist_ok=True)
-    main_parse(pdf_path=pdf_path, title_path=title_path, image_dir=image_dir)
+    main_parse(pdf_path=pdf_path, title_path=title_path, image_dir=image_dir)
+    tables = table_parse(pdf_path=pdf_path, title_path=title_path, start_title='六、已标价工程量清单', end_title = '七、施工组织设计')

+ 560 - 0
table.json

@@ -0,0 +1,560 @@
+[
+    {
+        "pagenos": [
+            13,
+            14,
+            15
+        ],
+        "col_len": 9,
+        "table": [
+            [
+                "序号",
+                "项目编码",
+                "项目名称",
+                "项目特征",
+                "单位",
+                "工程量",
+                "全费用综\n合单价",
+                "合价",
+                "备注"
+            ],
+            [
+                "1",
+                "0116050020\n01",
+                "踢脚线拆除",
+                "1、瓷砖踢脚线,高度15-20cm;\n2、含砂浆凿除,凿除至墙面基层。",
+                "m2",
+                "2000",
+                "10.35",
+                "20700",
+                ""
+            ],
+            [
+                "2",
+                "0116050010\n01",
+                "地砖及砂浆\n层凿除",
+                "1、施工部位:非设备区域;\n2、与非施工区域地面交界处做好地砖保护,破坏地砖进行恢复。\n3、地砖及砂浆层凿除,凿除至混凝土基层,厚度约5-8cm,以现场实\n际为准。\n4、凿除设备和施工方法需考虑降尘,以及震动对电站设备的影响。",
+                "m2",
+                "20000",
+                "10.21",
+                "204200",
+                ""
+            ],
+            [
+                "3",
+                "0116050010\n02",
+                "地砖凿除",
+                "1、施工部位:设备区域及周边;\n2、仅凿除地砖,厚度为1-2cm,以现场实际为准。",
+                "m2",
+                "1000",
+                "10.21",
+                "10210",
+                ""
+            ],
+            [
+                "4",
+                "0101030020\n01",
+                "垃圾清理外\n运",
+                "1、垃圾类型:凿除的地砖、踢脚线及砂浆层、地面铣刨层;\n2、建筑垃圾场内转运及外运运距由承包方自行考虑,外运地点需满\n足环保要求,并告知发包方;\n3、含垃圾消纳费。",
+                "m3",
+                "1743",
+                "259.02",
+                "451471.86",
+                ""
+            ],
+            [
+                "5",
+                "0116020020\n01",
+                "基面铣刨",
+                "1、地面整体铣刨,深度≥3mm;\n2、使用无尘设备,考虑震动对电气设备的影响。",
+                "m2",
+                "20000",
+                "5.17",
+                "103400",
+                ""
+            ],
+            [
+                "6",
+                "0111020030\n01",
+                "预制无机磨\n石施工",
+                "1、成品预制无机磨石,颜色与无机磨石整体施工相一致,厚度大于\n等于20mm;\n2、预制磨石铺贴,2cm干混地面砂浆 DS M20;\n3、不低于西卡、绰琪、迈拓品牌。\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "m2",
+                "1000",
+                "327",
+                "327000",
+                ""
+            ],
+            [
+                "7",
+                "0115020010\n01",
+                "护边角钢",
+                "1、部位:地坪收边;\n2、304哑光不锈钢角钢;\n3、不锈钢角钢规格为50×50×3mm;\n具体详见图纸及技术方案,材料垂直运输及二次转运由承包人自行考\n虑",
+                "m",
+                "2000",
+                "24.93",
+                "49860",
+                ""
+            ],
+            [
+                "8",
+                "0111010010",
+                "抗裂砂浆垫\n层",
+                "1、部位:不具备钢纤维混凝土运输条件的部位;\n2、成品抗裂砂浆垫层(非现场搅拌砂浆后添加外加剂),具备低收",
+                "m2",
+                "7000",
+                "214.08",
+                "1498560",
+                ""
+            ],
+            [
+                "",
+                "01",
+                "",
+                "缩早强快干性能;\n3、成品焊接钢筋网片直径8mm、间距150mm×150mm;\n4、厚度约5cm,以实际情况为准,成品品牌与无机磨石一致。\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "",
+                "",
+                "",
+                "",
+                ""
+            ],
+            [
+                "9",
+                "0111010030\n01",
+                "C25混凝土",
+                "1、C25细石商品混凝土垫层,厚度5-8cm,以现场实际为准;\n2、覆膜养护\n具体详见图纸及技术方案,材料垂直运输及二次转运由承包人自行考\n虑",
+                "m2",
+                "14000",
+                "72.51",
+                "1015140",
+                ""
+            ],
+            [
+                "10",
+                "01B004",
+                "钢纤维",
+                "1、钢纤维于拌合站添加至混凝土内,掺量为每立方米混凝土40-50kg\n钢纤维;\n2、抗拉强度不低于380MPa;\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "t",
+                "50",
+                "3182.05",
+                "159102.5",
+                ""
+            ],
+            [
+                "11",
+                "0111010020\n01",
+                "无机磨石",
+                "1、无机磨石地坪,厚度≥10mm,骨料粒径6-8mm,骨料以石英石为主;\n2、防污抗渗罩面。\n3、铝镁分隔条(包含墙脚分隔条);\n4、无机磨石体系尺寸变化率不大于0.05%,莫氏硬度6级及以上,抗\n折强度不小于6Mpa,抗压强度不小于30Mpa,无机磨石表面平整度2\n米靠尺不大于2mm。\n5、不低于绰琪鑫磨石、迈拓FREAZZO自然岩采系列、西卡Sikafloor\n55 Terrazzo CM系列品牌。\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "m2",
+                "20000",
+                "427.16",
+                "8543200",
+                ""
+            ],
+            [
+                "12",
+                "0111050060\n01",
+                "不锈钢踢脚\n线",
+                "1、施工部位:电站厂房;\n2、成品哑光拉丝304不锈钢踢脚线,面板整体厚度≥1mm,高度15cm;\n3、专用卡扣固定,每米不少于两个;\n4、含成品不锈钢阴阳角线及封头等配件。\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "m",
+                "10000",
+                "72.56",
+                "725600",
+                ""
+            ],
+            [
+                "13",
+                "0112030010\n01",
+                "墙面零星抹\n灰",
+                "1、部位:原踢脚线拆除后的墙面;\n2、1.20厚干混抹灰砂浆 DP M10抹灰\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "m2",
+                "2000",
+                "79.87",
+                "159740",
+                ""
+            ],
+            [
+                "14",
+                "0114060010\n01",
+                "墙面乳胶漆\n恢复",
+                "1、部位:原踢脚线拆除后的墙面;\n2、墙面修补,抗碱底漆二遍、内墙腻子二遍、面漆二遍。\n3、不低于多乐士、立邦、华润等产品性能参数。\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "m2",
+                "500",
+                "26.49",
+                "13245",
+                ""
+            ],
+            [
+                "15",
+                "0402050060\n01",
+                "定置管理划\n线(环氧地坪\n漆)",
+                "1. 部位:设备周边、通道周边等其他地面;\n2. 划线宽度100mm,底漆二遍、中漆一遍、面漆二遍;\n3.环氧地坪漆不低于巴斯夫、马贝、西卡等产品性能参数;\n具体详见图纸及技术方案,材料垂直运输及二次转运由承包人自行考",
+                "㎡",
+                "400",
+                "106.42",
+                "42568",
+                ""
+            ],
+            [
+                "",
+                "",
+                "",
+                "虑",
+                "",
+                "",
+                "",
+                "",
+                ""
+            ],
+            [
+                "16",
+                "0109040040\n01",
+                "成品地面结\n构缝装置",
+                "1、施工部位:地坪结构缝;\n2、成品承重型不锈钢结构缝装置,宽度15cm;\n3、盖板材质:铝合金或者不锈钢面板厚度不小于3mm;\n4、不锈钢基座,不锈钢滑杆@500,M8金属膨胀螺栓@300(交错排列),\n3mm不锈钢止水带,阻火带、填缝胶\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "m",
+                "1000",
+                "339.97",
+                "339970",
+                ""
+            ],
+            [
+                "17",
+                "01B002",
+                "设备防护措\n施",
+                "设备防护措施\n1、部分施工区域有电气盘柜,施工过程包含防尘、防火、防水、防\n碰撞、防飞溅、防污染、防较大震动等防护;\n2、地面凿除及地坪施工时,对电气设备使用彩钢板、油布等材料做\n好防护。\n3、防护方案由承包人报发包方审批。\n具体详见技术方案,材料垂直运输及二次转运由承包人自行考虑",
+                "m",
+                "5000",
+                "109",
+                "545000",
+                ""
+            ],
+            [
+                "",
+                null,
+                "合计(其中,安全文明施工费_35224.89_元。)",
+                null,
+                null,
+                null,
+                null,
+                "14208967.36",
+                null
+            ]
+        ],
+        "confidence": 1
+    },
+    {
+        "pagenos": [
+            34
+        ],
+        "col_len": 7,
+        "table": [
+            [
+                "序号",
+                "主材名称",
+                "规格型号",
+                "不低于下列同档次品牌",
+                null,
+                null,
+                "投标选用品牌及规格型号"
+            ],
+            [
+                "1",
+                "无机磨石",
+                "1、成品钢筋网片,丝径6mm;2、无机磨石地坪,厚度≥\n10mm,骨料粒径6-8mm;3、防污抗渗罩面。5、铝镁分隔\n条(包含墙脚分隔条);6、垫层与面层为同一品牌产品,\n且无机磨石体系尺寸变化率不大于0.05%,莫氏硬度6级\n及以上,抗折强度不小于6Mpa,抗压强度不小于30Mpa,\n无机磨石表面平整度2米靠尺不大于2mm。",
+                "西卡",
+                "绰琪",
+                "迈拓",
+                "浙江正邦建材科技有限公司"
+            ],
+            [
+                "2",
+                "预制无机磨石",
+                "1、成品预制无机磨石,颜色与无机磨石整体施工相一致,厚度大\n于等于20mm;\n2、预制磨石铺贴,2cm干混地面砂浆 DS M20;\n3、不低于西卡、绰琪、迈拓品牌。",
+                "西卡",
+                "绰琪",
+                "迈拓",
+                "浙江正邦建材科技有限公司"
+            ],
+            [
+                "3",
+                "抗裂砂浆垫层",
+                "1、部位:高程75.3m及以下或不具备钢纤维混凝土运输\n条件的部位;2、成品抗裂砂浆垫层(非现场搅拌砂浆后\n添加外加剂),具备低收缩早强快干性能;3、品牌与无\n机磨石一致",
+                "西卡",
+                "绰琪",
+                "迈拓",
+                "浙江正邦建材科技有限公司"
+            ],
+            [
+                "4",
+                "墙面恢复",
+                "1、部位:原踢脚线拆除后的墙面;2、墙面修补,抗碱底\n漆二遍、内墙腻子二遍、面漆二遍。",
+                "多乐士",
+                "立邦",
+                "华润",
+                "立邦"
+            ],
+            [
+                "5",
+                "环氧地坪漆",
+                "1、部位:定置管理划线;2、表面刷掺胶水泥浆满刮两遍;\n3、涂刷环氧地坪漆两遍底漆、中漆一遍,面漆两遍。",
+                "西卡",
+                "巴斯夫",
+                "马贝",
+                "浙江正邦建材科技有限公司"
+            ]
+        ],
+        "confidence": 1
+    },
+    {
+        "pagenos": [
+            35,
+            36
+        ],
+        "col_len": 7,
+        "table": [
+            [
+                "序\n号",
+                "名称",
+                "事项",
+                "单位",
+                "数量",
+                "含税单价\n(元)",
+                "含税合价\n(元)"
+            ],
+            [
+                "1",
+                "文明施工",
+                "安全警示、标志牌。",
+                "项",
+                "1",
+                "12000",
+                "12000"
+            ],
+            [
+                "2",
+                "现场围挡",
+                "现场采用封闭围挡、铁塔防护。",
+                "项",
+                "1",
+                "2000",
+                "2000"
+            ],
+            [
+                "3",
+                "八牌一图",
+                "",
+                "项",
+                "1",
+                "500",
+                "500"
+            ],
+            [
+                "4",
+                "材料堆放",
+                "材料、构件、料具等堆放时,悬挂有名\n称、品种、规格等标牌;\n水泥和其他易飞扬细颗粒建筑材料应密\n闭存放或采取覆盖等措施;\n易燃、易爆和有毒有害物品分类存放。",
+                "项",
+                "1",
+                "1000",
+                "1000"
+            ],
+            [
+                "5",
+                "现场防火",
+                "消防器材配置合理,设置消防栓、灭火\n器等,符合消防要求。",
+                "项",
+                "1",
+                "200",
+                "200"
+            ],
+            [
+                "6",
+                "垃圾清运",
+                "施工现场应设置密闭式垃圾站;\n施工垃圾、生活垃圾应分类存放、生活\n垃圾清理外运;\n施工垃圾必须采用相应容器或管道运\n输。",
+                "项",
+                "1",
+                "800",
+                "800"
+            ],
+            [
+                "7",
+                "安全生产",
+                "安全生产检查、评价、咨询和标准化建\n设费用;\n安全生产培训、教育、宣传费用;\n治安秩序管理费用。",
+                "项",
+                "1",
+                "1000",
+                "1000"
+            ],
+            [
+                "8",
+                "宣传栏、环保保\n护及不扰民措施",
+                "宣传栏、安全宣传标语等,\n洗车(防止污染市区道路)、粉尘;\n设备噪声控制、防扰民措施;\n水泥及其他细颗粒封闭存放及覆盖措\n施、土石方外运车辆保护;现场污染源\n的控制,排污(污水、废气)措施等。",
+                "项",
+                "1",
+                "1000",
+                "1000"
+            ],
+            [
+                "9",
+                "临时设施",
+                "现场办公、值班室、茶水休息间、工地\n厕所、库房、砂浆搅拌站、加工防护棚\n施工现场范围内建筑物(构筑物)沿外\n边起 50m以内的供(排)水管道(沟)、\n供电管线等设施的搭设、维修、拆除、\n清理和摊销等费用。",
+                "项",
+                "1",
+                "500",
+                "500"
+            ],
+            [
+                "10",
+                "施工现场临时用\n电",
+                "施工中检修电源的布置、拆除、维护、\n修理等。\n按三级配电要求,配备总配电箱、分配\n电箱、开关箱三类(铁质)标准电箱。\n开关箱应符合一机、一箱、一闸、一漏。\n三类电箱中的各类电器应是合格品。\n按两级保护的要求,选取符合容量要求\n和质量合格的总配电箱和开关箱中的漏\n电保器。\n对大型、落地式分配电箱、开关箱设置\n防护棚和通透式围档。",
+                "项",
+                "1",
+                "500.89",
+                "500.89"
+            ],
+            [
+                "11",
+                "接地保护装置",
+                "施工现场应设置接地带装置。",
+                "项",
+                "1",
+                "500",
+                "500"
+            ],
+            [
+                "12",
+                "现场变配电装置",
+                "总配电室建筑材料必须达到三级防火要\n求,室内做硬地坪、电缆沟、吊顶。",
+                "项",
+                "1",
+                "200",
+                "200"
+            ],
+            [
+                "13",
+                "安全施工",
+                "临边洞口交叉高处作业防护",
+                "项",
+                "1",
+                "1500",
+                "1500"
+            ],
+            [
+                "14",
+                "预留洞口防护",
+                "用硬质材料全封闭;短边超过1.5m长的\n洞口,除封闭外四周还应设有防护栏杆。",
+                "项",
+                "1",
+                "500",
+                "500"
+            ],
+            [
+                "15",
+                "楼梯边防护",
+                "设1.2m高的定型化、工具化、标准化的\n防护栏杆, 18㎝高的踢脚板。",
+                "项",
+                "1",
+                "500",
+                "500"
+            ],
+            [
+                "16",
+                "垂直方向交叉作\n业防护",
+                "设置防护隔离棚或其他设施。",
+                "项",
+                "1",
+                "500",
+                "500"
+            ],
+            [
+                "17",
+                "高空作业防护",
+                "有悬挂安全带的悬索或其他设施;有操\n作平台;有上下的梯子或其他形式的通\n道。",
+                "项",
+                "1",
+                "800",
+                "800"
+            ],
+            [
+                "18",
+                "安全防护用品",
+                "安全帽、安全带、安全绳,特种作业人\n员(电工、混凝土工、焊工等)防护服\n装、用品等;生产工人防暑降温费、防\n寒保暖费用。",
+                "项",
+                "1",
+                "1000",
+                "1000"
+            ],
+            [
+                "19",
+                "机械设备防护",
+                "机械设备防护。",
+                "项",
+                "1",
+                "504",
+                "504"
+            ],
+            [
+                "20",
+                "特种设备",
+                "垂直运输等特种设备检测、检验;\n物料提升机、施工电梯等卸料平台搭设、\n两侧用密目式安全立网全封闭,安全防\n护门、防护棚等。",
+                "项",
+                "1",
+                "1000",
+                "1000"
+            ],
+            [
+                "21",
+                "应急救援预案",
+                "现场临时医疗、救援及保健物品的配置\n费用; 配备、维护、保养应急救援器材、\n设备费用和应急演练费用。",
+                "项",
+                "1",
+                "1000",
+                "1000"
+            ],
+            [
+                "22",
+                "重大危险源",
+                "开展重大危险源和事故隐患评估、监控\n和整改支出。",
+                "项",
+                "1",
+                "1500",
+                "1500"
+            ],
+            [
+                "23",
+                "非正常情况施工",
+                "其它特殊情况产生的防护费用。",
+                "项",
+                "1",
+                "2020",
+                "2020"
+            ],
+            [
+                "24",
+                "疫情防控费用",
+                "因疫情防控需要购买口罩、消毒液以及\n进行核酸检测等费用",
+                "项",
+                "1",
+                "4200",
+                "4200"
+            ],
+            [
+                "",
+                "......",
+                ".......",
+                "",
+                "",
+                "",
+                ""
+            ],
+            [
+                "",
+                "总计",
+                "",
+                "",
+                "",
+                "35224.89",
+                "35224.89"
+            ]
+        ],
+        "confidence": 1
+    }
+]