From 1c542377a9db2df39ad48672167f164c74c1f013 Mon Sep 17 00:00:00 2001 From: zy123 <646228430@qq.com> Date: Sat, 23 Nov 2024 16:32:07 +0800 Subject: [PATCH] =?UTF-8?q?=2011.23=20=E7=A1=AE=E4=BF=9D=E4=BA=86=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E4=B8=8B=E5=B1=82=E7=BA=A7=E4=B8=8D=E8=B6=85=E8=BF=87?= =?UTF-8?q?2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flask_app/货物标/技术参数要求提取.py | 59 ++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/flask_app/货物标/技术参数要求提取.py b/flask_app/货物标/技术参数要求提取.py index c6bedcd..28951b7 100644 --- a/flask_app/货物标/技术参数要求提取.py +++ b/flask_app/货物标/技术参数要求提取.py @@ -15,7 +15,43 @@ from flask_app.货物标.截取pdf货物标版 import truncate_pdf_main from flask_app.general.doubao import doubao_model, generate_full_user_query, pdf2txt from flask_app.货物标.技术参数要求提取后处理函数 import postprocess, all_postprocess +def truncate_system_keys(data): + """ + 遍历输入的字典,若键名中包含'系统'或'软件',且其子键数量 >= 3,则将其子键的值设置为[],限制深度为一层。 + Args: + data (dict or list): 输入的数据,可以是嵌套的字典或列表。 + + Returns: + dict or list: 处理后的数据。 + """ + if isinstance(data, dict): + new_data = {} + for key, value in data.items(): + # 检查键名是否包含'系统'或'软件' + if '系统' in key or '软件' in key: + if isinstance(value, dict): + child_count = len(value) + # 判断子键数量是否 >= 3 + if child_count >= 3: + # 截断子键,将其值设置为 [] + new_data[key] = {subkey: [] for subkey in value.keys()} + else: + # 子键数量少于3,递归处理子键 + new_data[key] = truncate_system_keys(value) + else: + # 如果值不是字典(例如列表),直接设置为 [] + new_data[key] = [] + else: + # 不包含'系统'或'软件',递归处理子字典或列表 + new_data[key] = truncate_system_keys(value) + return new_data + elif isinstance(data, list): + # 如果是列表,递归处理列表中的每个元素 + return [truncate_system_keys(item) for item in data] + else: + # 对于其他类型的数据,保持不变 + return data def generate_key_paths(data): """ 处理输入的字典,生成 key_paths, grouped_paths 和 good_list,并根据条件修改原始字典。 @@ -342,7 +378,7 @@ def get_technical_requirements(file_path,invalid_path,processed_filepath): 2. 采购目标:采购目标通常有硬件(如设备、货物)和软件(如系统软件、应用APP),一次采购活动可能同时包含这两种类型。对于工程类的施工、建设采购需求,无需提取。 3. 非清单形式处理:若未出现采购清单,则从表格或文字中摘取采购信息。 4. 系统归属:一些采购活动可能将采购目标划分为若干系统和货物,每个系统可能包含若干货物,则将这些货物名称作为该系统的二级键;系统可以只包含总体'系统功能'而无货物。 - 5. 软件需求:对于软件应用或系统软件需求,仅需列出系统模块构成(若有),并作为该系统键值的一部分,无需在模块下再细分功能。 + 5. 软件需求:对于软件应用或系统软件采购,若有多个系统且序号分明,请不要遗漏,最多仅需列出系统模块构成(若有),并作为该系统键值的一部分,无需在模块下再细分功能。 6. 系统功能:若采购的某系统提及总体系统功能,则在系统值中添加'系统功能'二级键,不展开具体内容。 7. 完整性:确保不遗漏系统内的货物,也不添加未提及的内容。 @@ -385,8 +421,8 @@ def get_technical_requirements(file_path,invalid_path,processed_filepath): "系统功能":[], "权限管理模块":[] }}, - "XX小程序":[], - "数据分析中心":[] + "XX管理系统":[], + "XX管理系统":[] }} }} @@ -410,7 +446,8 @@ def get_technical_requirements(file_path,invalid_path,processed_filepath): print(model_res) cleaned_res = clean_json_string(model_res) #转字典 - key_paths, grouped_paths, good_list, data_copy= generate_key_paths(cleaned_res['采购需求']) # 提取需要采购的货物清单 key_list:交通监控视频子系统.高清视频抓拍像机 ... grouped_paths是同一系统下同时有'交换机-1'和'交换机-2',提取'交换机' ,输出eg:{'交通标志.标志牌铝板', '交通信号灯.交换机'} + processed_data=truncate_system_keys(cleaned_res['采购需求']) + key_paths, grouped_paths, good_list, data_copy= generate_key_paths(processed_data) # 提取需要采购的货物清单 key_list:交通监控视频子系统.高清视频抓拍像机 ... grouped_paths是同一系统下同时有'交换机-1'和'交换机-2',提取'交换机' ,输出eg:{'交通标志.标志牌铝板', '交通信号灯.交换机'} modified_data=rename_keys(data_copy) # user_query_template = "请你根据该货物标中采购要求部分的内容,请你给出\"{}\"的技术参数(或采购要求),请以json格式返回结果,外层键名为\"{}\", 键值对中的键是你对该要求的总结,而值需要完全与原文保持一致,不可擅自总结删减。" user_query_template = """请根据货物标中采购要求部分的内容,告诉我\"{}\"的技术参数或采购要求是什么。请以 JSON 格式返回结果,键名为\"{}\",键值为一个列表,列表中包含若干描述\"{}\"的技术参数或采购要求的字符串,请按原文内容回答,保留三角▲、五角★和序号,不可擅自增添内容,尤其是不可擅自添加序号。 @@ -526,22 +563,10 @@ def test_all_files_in_folder(input_folder, output_folder): except Exception as e: print(f"处理文件 {file_path} 时出错: {e}") -#TODO:对于软件系统功能,提取偏离表的时候额外处理 包头市公安支队机动车查验监管系统招标文201907_procurement.pdf -#TODO: 提示词限制最多两层防止,嵌套过多,代码也要做处理,'系统'下的最多只有一层 eg 妇幼、陕西 -# { -# "采购需求": { -# "查验视频监管软件系统": { -# "视频设备管理": { -# "查验通道初始化": {}, -# "视频设备绑定": {} -# }, -# "业务视频应用": { -# "视频回放": {} -# }, if __name__ == "__main__": start_time=time.time() # truncate_file="C:\\Users\\Administrator\\Desktop\\fsdownload\\469d2aee-9024-4993-896e-2ac7322d41b7\\ztbfile_procurement.docx" - truncate_file=r"C:\Users\Administrator\Desktop\货物标\output1\陕西省公安厅交通警察总队高速公路交通安全智能感知巡查系统项目 (1)_procurement.pdf" + truncate_file=r"C:\Users\Administrator\Desktop\货物标\output1\包头市公安支队机动车查验监管系统招标文201907_procurement.pdf" # invalid_path="D:\\flask_project\\flask_app\\static\\output\\output1\\e7dda5cb-10ba-47a8-b989-d2993d34bb89\\ztbfile.pdf" # truncate_file="D:\\flask_project\\flask_app\\static\\output\\output1\\e7dda5cb-10ba-47a8-b989-d2993d34bb89\\ztbfile_procurement.docx" # output_folder="C:\\Users\\Administrator\\Desktop\\货物标\\output1\\tmp"