diff --git a/flask_app/货物标/截取pdf货物标版.py b/flask_app/货物标/截取pdf货物标版.py index 3d23cd6..445fada 100644 --- a/flask_app/货物标/截取pdf货物标版.py +++ b/flask_app/货物标/截取pdf货物标版.py @@ -54,16 +54,6 @@ def get_patterns_for_evaluation_method(): r'(?max_tokens: - questions_to_continue.append((question, message)) - else: - temp_final.update(parsed) - # 第二步:多线程处理需要调用 `continue_answer` 的问题 - if questions_to_continue: - continued_results = process_continue_answers(questions_to_continue, model_type, file_id) - temp_final.update(continued_results) - - """根据所有键是否已添加处理技术要求""" - # 更新原始采购需求字典 - final_res=combine_and_update_results(modified_data, temp_final) - ffinal_res=all_postprocess(final_res) - ffinal_res["货物列表"] = good_list - # 输出最终的 JSON 字符串 - return {"采购需求":ffinal_res} +# cleaned_res = clean_json_string(model_res) #转字典 +# if not cleaned_res: +# print("本项目没有采购需求!!!") +# return {"采购需求": {}} +# preprocessed_data=preprocess_data(cleaned_res) #确保最内层为[] +# processed_data=truncate_system_keys(preprocessed_data) #限制深度 +# 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 格式返回结果,键名为\"{}\",键值为一个列表,列表中包含若干描述\"{}\"的技术参数或采购要求或功能说明的字符串,请按原文内容回答,保留三角▲、五角★或其他特殊符号(若有)和序号(若有),不可擅自增删内容,尤其是不可擅自添加序号。 +# **重要限制**: +# - **仅提取技术参数或采购要求,不包括任何商务要求**。商务要求通常涉及供应商资格、报价条款、交货时间、质保等内容,是整体的要求;而技术参数或采购要求则具体描述产品的技术规格、功能、性能指标等。 +# - **商务要求的关键词示例**(仅供参考,不限于此):报价、交货、合同、资质、认证、服务、保修期等。如果内容包含上述关键词,请仔细甄别是否属于商务要求。 +# +# 要求与指南: +# 1. 你的键值应该全面,不要遗漏。 +# -a.若技术参数或采购要求在表格中,那么单元格内的内容基本都要涵盖 +# -对于单元格内以序号分隔的各条参数要求,应逐条提取,并分别作为键值中的字符串列表项。 +# -对于无序号标明且在同一单元格内的参数要求或功能说明,也要根据语义分别添加进键值中。 +# -b.若技术参数或采购要求在正文部分,应准确定位到与目标货物(设备、系统、功能模块)相关的内容,将其后的技术参数或采购要求或功能说明完整提取,逐一添加到键值的字符串列表中,不得擅自添加或修改序号。 +# 2. 如果存在嵌套结构,且原文为Markdown 的表格语法,如'摄像机|有效像素|≥900W像素', 请不要返回该Markdown语法,而是使用冒号':'将相关信息拼接在一起,生成一条完整且清晰的技术参数(或采购要求)描述,作为列表中的一个字符串。如"摄像机:有效像素:≥900W像素"。 +# 3. 字符串中的内容为具体的技术参数要求或采购要求,请不要返回诸如'(1)高清录像功能'这种标题性质且不能体现要求的内容。 +# 4. 如果该货物没有相关采购要求或技术参数要求,键值应为空列表[]。 +# +# ### 示例输出1如下: +# {{ +# "摄像机控制键盘": [ +# "1、▲支持串行 RS232/RS422 和 IP 混合控制,允许在一个控制器上使用 RS232/RS422/IP 控制单个系统中的摄像机;", +# "2、支持 2 组 RS422 串口 VISCA 协议菊花链控制 2x7 台摄像机。", +# "★能够自动对焦,提供检测报告" +# ] +# }} +# +# ### 示例输出2如下(包含嵌套结构): +# {{ +# "摄像机": [ +# "摄像机:有效像素:≥900W像素", +# "摄像机:最低照度:彩色≤0.001lx", +# "协议:routes 接口开放:具备;▲支持标准 ONVIF 协议与第三方厂家设备进行互联;支持 GB/T28181;应提供 SDK" +# ] +# }} +# +# {} +# """ +# user_query_template_two="""请根据货物标中采购要求部分的内容,告诉我\"{}\"的技术参数或采购要求是什么。由于该货物存在 {} 种不同的采购要求或技术参数,请逐一列出,并以 JSON 格式返回结果。请以'货物名-编号'区分多种型号,编号为从 1 开始的自然数,依次递增,即第一个键名为\"{}-1\";键值为一个列表,列表中包含若干描述\"{}\"的技术参数或采购要求或功能说明的字符串,请按原文内容回答,保留三角▲、五角★或其他特殊符号(若有)和序号(若有),不可擅自增删内容,尤其是不可擅自添加序号。 +# +# 要求与指南: +# 1. 你的键值应该全面,不要遗漏。 +# -a.若技术参数或采购要求在表格中,那么单元格内的内容基本都要涵盖 +# -对于单元格内以序号分隔的各条参数要求,应逐条提取,并分别作为键值中的字符串列表项。 +# -对于无序号标明且在同一单元格内的参数要求或功能说明,也要根据语义分别添加进键值中。 +# -b.若技术参数或采购要求在正文部分,应准确定位到与目标货物(设备、系统、功能模块)相关的内容,将其后的技术参数或采购要求或功能说明完整提取,逐一添加到键值的字符串列表中,不得擅自添加或修改序号。 +# 2. 如果存在嵌套结构,且原文为Markdown 的表格语法,如'摄像机|有效像素|≥900W像素', 请不要返回该Markdown语法,而是使用冒号':'将相关信息拼接在一起,生成一条完整且清晰的技术参数(或采购要求)描述,作为列表中的一个字符串。如"摄像机:有效像素:≥900W像素"。 +# 3. 字符串中的内容为具体的技术参数要求或采购要求,请不要返回诸如'(1)高清录像功能'这种标题性质且不能体现要求的内容。 +# 4. 如果该货物没有相关采购要求或技术参数要求,键值应为空列表[]。 +# +# ### 示例输出1如下: +# {{ +# "交换机-1": [ +# "★1、支持固化千兆电口≥8 个,固化千兆光口≥2 个,桌面型设备;", +# "2、支持静态链路聚合" +# ], +# "交换机-2": [ +# "1、交换容量≥52Gbps,包转发率≥38.69Mpps,", +# "2、提供国家强制性产品认证证书及测试报告(3C)", +# "★能实现信号控制独立传输" +# ] +# }} +# +# ### 示例输出2如下(包含嵌套结构): +# {{ +# "摄像机-1": [ +# "摄像机:有效像素:≥900W像素", +# "摄像机:最低照度:彩色≤0.001lx", +# "协议:routes 接口开放:具备;▲支持标准 ONVIF 协议与第三方厂家设备进行互联;支持 GB/T28181;应提供 SDK" +# ], +# "摄像机-2": [ +# "支持夜视", "支持云存储" +# ] +# }} +# +# {} +# """ +# queries = [] +# for key in key_paths: +# # 将键中的 '.' 替换为 '下的' +# modified_key = key.replace('.', '下的') +# # 使用修改后的键填充第一个占位符,原始键填充第二个占位符 +# if model_type==1: +# new_query = user_query_template.format(modified_key, key, modified_key,f"文件内容:{full_text}") #转豆包后取消注释 +# else: +# new_query = user_query_template.format(modified_key, key, modified_key,"") +# queries.append(new_query) +# +# # 处理 grouped_paths 中的项,应用 user_query_template_two +# for grouped_dict in grouped_paths: +# for grouped_key, grouped_key_cnt in grouped_dict.items(): +# # 将键中的 '.' 替换为 '下的' +# modified_grouped_key = grouped_key.replace('.', '下的') +# if model_type==1: +# new_query = user_query_template_two.format(modified_grouped_key, grouped_key_cnt, grouped_key, +# modified_grouped_key, f"文件内容:{full_text}") +# else: +# new_query = user_query_template_two.format(modified_grouped_key, grouped_key_cnt, grouped_key, +# modified_grouped_key, "") +# queries.append(new_query) +# if model_type==1: +# results = multi_threading(queries, "", "", 3,True) # 豆包 +# else: +# results = multi_threading(queries, "", file_id, 2,True) # qianwen-long +# temp_final={} +# if not results: +# print("errror!未获得大模型的回答!") +# else: +# # 第一步:收集需要调用 `continue_answer` 的问题和解析结果 +# questions_to_continue = [] # 存储需要调用 continue_answer 的 (question, parsed) +# max_tokens=3900 if model_type==1 else 5900 +# for question, response in results: +# message=response[0] +# parsed = clean_json_string(message) +# total_tokens=response[1] +# if not parsed and total_tokens>max_tokens: +# questions_to_continue.append((question, message)) +# else: +# temp_final.update(parsed) +# # 第二步:多线程处理需要调用 `continue_answer` 的问题 +# if questions_to_continue: +# continued_results = process_continue_answers(questions_to_continue, model_type, file_id) +# temp_final.update(continued_results) +# +# """根据所有键是否已添加处理技术要求""" +# # 更新原始采购需求字典 +# final_res=combine_and_update_results(modified_data, temp_final) +# ffinal_res=all_postprocess(final_res) +# ffinal_res["货物列表"] = good_list +# # 输出最终的 JSON 字符串 +# return {"采购需求":ffinal_res} def test_all_files_in_folder(input_folder, output_folder): # 确保输出文件夹存在 @@ -687,10 +696,10 @@ if __name__ == "__main__": # invalid_path="D:\\flask_project\\flask_app\\static\\output\\output1\\e7dda5cb-10ba-47a8-b989-d2993d34bb89\\ztbfile.pdf" # file_id = upload_file(truncate_file) truncate_file=r'C:\Users\Administrator\Desktop\新建文件夹 (3)\需求\“天府粮仓”青白江区“一园三片”数字化提升和标准化体系建设项目(三次)招标文件(N510113202400010820250102001)_procurement.pdf' - invalid_path=r"D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\invalid_del.docx" + invalid_path=r"C:\Users\Administrator\Desktop\货物标\extract_files\107国道.txt" # file_id=upload_file(truncate_file) # processed_filepath = convert_file_to_markdown(truncate_file) - processed_filepath=r"C:\Users\Administrator\Desktop\新建文件夹 (3)\需求\extract1.txt" + processed_filepath=r"C:\Users\Administrator\Desktop\货物标\extract_files\107国道.txt" res=get_technical_requirements(invalid_path,processed_filepath,1) json_string = json.dumps(res, ensure_ascii=False, indent=4) print(json_string)