11.28 技术参数提取

This commit is contained in:
zy123 2024-11-28 17:27:44 +08:00
parent 493e8abf31
commit 00a4218e06
5 changed files with 133 additions and 138 deletions

View File

@ -72,6 +72,6 @@ def convert_pdf_to_markdown(file_path):
if __name__ == "__main__":
file_path=r"C:\Users\Administrator\Desktop\货物标\output3\ztbfile_qualification1.pdf"
file_path=r"C:\Users\Administrator\Desktop\fsdownload\e702f1e6-095d-443d-bb7d-ef2e42037cb1\ztbfile_procurement.pdf"
res=convert_pdf_to_markdown(file_path)
print(res)

View File

@ -113,9 +113,16 @@ def combine_evaluation_standards(evaluation_method):
# user_query_2 = (
# "根据该文档中的评标办法前附表,请你列出该文件的技术评分,商务评分,投标报价评审标准以及它们对应的具体评分要求,若对应内容中存在其他信息,在键名如'技术评分'中新增子键名'备注'存放该信息。如果评分内容因素不是这3个则返回文档中给定的评分内容因素以及它的评分要求。请以json格式返回结果不要回答有关形式、资格、响应性评审标准的内容")
user_query_2 = (
"""
根据该文档中的评标办法前附表请你列出该文件的技术评分商务评分投标报价评审以及它们对应的具体评分要求请以json格式返回结果最外层键名分别是'技术评分','商务评分','投标报价评审',请在这三大项评分中分别用若干键值对表示具体评分项外层键名为各评审因素可能存在嵌套关系但最内层键值为一个列表列表中包含若干可为一描述该评审因素的评分及要求的字典内层键名分别是'评分''要求'若无评分可删去'评分'键值对'要求'中说明了该评审因素的评分标准若这三大项评分中存在其他信息则在相应评分大块内部新增键名'备注'存放该信息键值为具体的要求否则不需要如果评分内容因素不是这三大项则返回文档中给定的评分内容因素以及它们的具体评分要求
以下为需要考虑的注意事项1.不要回答有关资格审查的内容也不要从评标办法正文中提取回答 2.若大项的'xx评分'要求未在文中说明则键名'xx评分'的键值设为'本项目无xx评分项'例如"技术评分":"本项目无技术评分项" 3. 如果该招标活动有多个包则最外层键名为对应的包名,否则不需要 4.你无需将表格的单元格内的内容进行拆分需要将它视为一个整体以下为示例输出仅供格式参考
"""根据该文档中的评标办法表格请你列出该文件的技术评分商务评分投标报价评审以及它们对应的具体评分要求请以json格式返回结果最外层键名分别是'技术评分','商务评分','投标报价评审',请在这三大项评分中分别用若干键值对表示具体评分项,外层键名为各评审因素,可能存在嵌套关系,但最内层键值为一个列表,列表中包含若干(可为一)描述该评审因素的评分及要求的字典,内层键名分别是'评分''要求',若无评分,可删去'评分'键值对,'要求'中说明了该评审因素的评分标准;若这三大项评分中存在其他信息,则在相应评分大块内部新增键名'备注'存放该信息,键值为具体的要求,否则不需要。如果评分内容(因素)不是这三大项,则返回文档中给定的评分内容(因素)以及它们的具体评分要求。
要求与指南
1. 请首先定位评分细则的表格不要回答有关资格审查的内容也不要从评标办法正文中提取回答
2. 若大项的'xx评分'要求未在文中说明则键名'xx评分'的键值设为'本项目无xx评分项'例如"技术评分":"本项目无技术评分项"
3. 如果该招标活动有多个包则最外层键名为对应的包名,否则最外层键名为各大评分项
4. 你无需将表格的单元格内的内容进行拆分需要将它视为一个整体
5. '评分'的键值不能是一个范围数字'0-5分'应该是一个具体数字'5分'或者是一个定性的指标如'合格制'
以下为示例输出仅供格式参考
{
"一包": {
"技术评分": {
@ -181,7 +188,7 @@ def combine_evaluation_standards(evaluation_method):
return update_json #商务标技术标整合
if __name__ == "__main__":
# evaluation_method="C:\\Users\\Administrator\\Desktop\\招标文件\\招标01_evaluation_method.pdf"
evaluation_method= r"D:\flask_project\flask_app\static\output\output1\9a4e3bc3-8367-4529-87db-af0ea53dc348\ztbfile_evaluation_method.pdf"
evaluation_method= r"C:\Users\Administrator\Desktop\招标文件\招标04_evaluation_method.pdf"
evaluation_standards_res=combine_evaluation_standards(evaluation_method)
# 从结果中提取"商务标"和"技术标"
technical_standards = {"技术评分": evaluation_standards_res.get("技术评分", {})}

View File

@ -290,51 +290,34 @@ def combine_and_update_results(original_data, updates):
return original_data
# user_query1 = """
# 请你首先定位该采购文件中的采购清单或采购需求部分,请告诉我需要采购的货物,如果有采购清单,请直接根据清单上的货物(或系统)名称给出结果,注意不要返回'说明'或'规格'或'技术参数'列中的内容若没有采购清单你要从表格中或文中摘取需要采购的系统和货物采购需求中可能包含层次关系例如采购的某系统中可能包含几种货物那么你需要用嵌套键值对表示这种关系且不要遗漏该系统中包含的货物你的输出请以json格式返回最外层键名为'采购需求',嵌套键名为对应的系统名称或货物名称,需与原文保持一致,无需给出采购数量和单位。以下为需要考虑的特殊情况:如果采购清单中同一层级(或同一系统)下存在同名货物且它们的采购要求有所不同,请你以'货物名-编号'区分多种型号,编号为从 1 开始的自然数,依次递增,例如若采购清单中有两种型号的'交换机',那么你应返回两个键名,'交换机-1'和'交换机-2';如有未知内容,在对应键值处填'未知'。以下为考虑了特殊情况的示例输出:
# {
# "采购需求": {
# "交换机-1"{},
# "交换机-2":{},
# "门禁管理系统": {},
# "交通监控视频子系统": {
# "高清视频抓拍像机":{},
# "补光灯":{}
# },
# "LED全彩显示屏": {}
# }
# }
# """
#文件内容以markdown格式组织其中表格部分若有以html语法组织
def get_technical_requirements(file_path,invalid_path,processed_filepath):
# docx_file_path=pdf2docx(file_path)
file_id=upload_file(file_path) #docx
file_id=upload_file(file_path) #目前传入的为docx文档
first_query_template="该文件是否说明了采购需求,即需要采购哪些货物?如果有,请回答'',否则,回答''" #防止截取失败
judge_res=qianwen_long(file_id,first_query_template)
prompt_template1 = '''
任务解析采购文件提取采购需求并以JSON格式返回
任务解析采购文件提取采购需求并以JSON格式返回
要求与指南
1. 精准定位请运用文档理解能力找到文件中的采购需求部分若有采购清单请直接根据采购清单上的货物或系统名称给出结果
2. 采购目标采购目标通常有硬件如设备货物和软件如系统软件应用APP一次采购活动可能同时包含这两种类型对于工程类的施工建设采购需求无需提取
3. 非清单形式处理若未出现采购清单则从表格或文字中摘取采购信息
4. 系统归属一些采购活动可能将采购目标划分为若干系统和货物每个系统可能包含若干货物则将这些货物名称作为该系统的二级键系统可以只包含总体'系统功能'而无货物
5. 软件需求对于软件应用或系统软件需求仅需列出系统模块构成若有并作为系统键值的一部分无需在模块下再细分功能
6. 系统功能若采购的某系统提及总体系统功能则在系统值中添加'系统功能'二级键不展开具体内容
7. 完整性确保不遗漏系统内的货物也不添加未提及的内容
要求与指南
1. 精准定位请运用文档理解能力找到文件中的采购需求部分若有采购清单请直接根据采购清单上的货物或系统名称给出结果若未出现采购清单则从表格或文字中摘取采购信息
2. 采购目标采购种类通常有硬件如设备货物和软件如系统软件应用APP一次采购活动可以同时包含这两种类型
3. 系统归属一些采购活动可能将采购目标划分为若干系统和货物每个系统可能包含若干货物则将这些货物名称作为该系统的二级键系统可以只包含总体'系统功能'而无货物
4. 软件需求对于软件应用或系统软件需求仅需列出系统模块构成若有并作为系统键值的一部分无需在模块下再细分功能
5. 系统功能若采购的某系统提及总体系统功能则在系统值中添加'系统功能'二级键不展开具体内容
6. 完整性确保不遗漏系统内的货物也不添加未提及的内容若采购清单之外有额外的货物采购要求且该货物暂未提取至JSON回答中请将这些货物名称也包含进来
输出格式
1.JSON格式最外层键名为'采购需求'
2.层次关系用嵌套键值对表示
3.嵌套键名为系统或货物或模块名称与原文保持一致
4.最内层键值应为空列表[]
5.不包含'说明''规格''技术参数'等列内容仅返回采购的货物或系统或模块名称
输出格式
1.JSON格式最外层键名为'采购需求'
2.层次关系用嵌套键值对表示
3.嵌套键名为系统或货物或模块名称与原文保持一致
4.最内层键值应为空列表[]
5.不包含'说明''规格''技术参数'等列内容仅返回采购的货物或系统或模块名称
特殊情况处理
同一层级如同一系统中下同名但采购要求不同的货物'货物名-编号'区分编号从1递增例如若同层级下存在两种型号的交换机那么命名分别是'交换机-1''交换机-2'以规避重复键名否则无需在名称后添加编号
特殊情况处理
同一层级如同一系统中下同名但采购要求不同的货物'货物名-编号'区分编号从1递增例如若同层级下存在两种型号的交换机那么命名分别是'交换机-1''交换机-2'以规避重复键名否则无需在名称后添加编号
{{
{{
"采购需求": {{
"交换机-1": [],
"交换机-2": [],
@ -349,9 +332,9 @@ def get_technical_requirements(file_path,invalid_path,processed_filepath):
"LED全彩显示屏": []
// 其他系统和货物
}}
}}
示例输出2系统软件采购
{{
}}
示例输出2系统软件采购
{{
"采购需求": {{
"信息管理系统": {{
"通用模块":[],
@ -364,36 +347,34 @@ def get_technical_requirements(file_path,invalid_path,processed_filepath):
"XX小程序":[],
"数据分析中心":[]
}}
}}
}}
注意事项
1.严格按照上述要求执行确保输出准确性和规范性
2.如有任何疑问或不确定内容请保留原文描述必要时使用'未知'标注
'''
注意事项
1.严格按照上述要求执行确保输出准确性和规范性
2.如有任何疑问或不确定内容请保留原文描述必要时使用'未知'标注
'''
prompt_template2 = '''
任务解析采购文件提取采购需求并以JSON格式返回
任务你负责解析采购文件提取采购需求并以JSON格式返回不要遗漏该项目需要采购的货物或系统
要求与指南
1. 精准定位请运用文档理解能力找到文件中的采购需求部分若有采购清单请直接根据采购清单上的货物或系统名称给出结果
2. 采购目标采购目标通常有硬件如设备货物和软件如系统软件应用APP一次采购活动可能同时包含这两种类型对于工程类的施工建设采购需求无需提取
3. 非清单形式处理若未出现采购清单则从表格或文字中摘取采购信息
4. 系统归属一些采购活动可能将采购目标划分为若干系统和货物每个系统可能包含若干货物则将这些货物名称作为该系统的二级键系统可以只包含总体'系统功能'而无货物
5. 软件需求对于软件应用或系统软件采购若有多个系统且序号分明请不要遗漏最多仅需列出系统模块构成若有并作为该系统键值的一部分无需在模块下再细分功能
6. 系统功能若采购的某系统提及总体系统功能则在系统值中添加'系统功能'二级键不展开具体内容
7. 完整性确保不遗漏系统内的货物也不添加未提及的内容
要求与指南
1. 精准定位请运用文档理解能力定位文件中的采购需求部分若有采购清单请直接根据采购清单上的货物或系统名称给出结果注意你无需提取诸如'说明''规格''技术参数''描述'等列的内容即你不需要给出详细的采购要求仅返回采购的货物或系统或模块名称若没有采购清单则从表格或文本中摘取采购信息
2. 采购目标采购种类通常有硬件如设备货物和软件如系统软件应用APP一次采购活动可以同时包含这两种类型
3. 系统归属一些采购活动可能将采购目标划分为若干系统和货物每个系统可能包含若干货物则将这些货物名称作为该系统的二级键注意这种包含关系是通过表格结构或文档标题层次来得出的系统可以只包含总体'系统功能'而无货物
5. 软件需求对于软件应用或系统软件采购若有多个系统且序号分明请不要遗漏最多仅需列出系统模块构成若有并作为该系统键值的一部分无需在模块下再细分功能
5. 系统功能若采购的某系统提及总体系统功能则在系统值中添加'系统功能'二级键不展开具体内容
6. 完整性确保不遗漏系统内的货物也不添加未提及的内容'采购清单'中未提取的货物或系统名称在形如'主要设备功能指标'的标题下有详细参数指标要求请将该货物名也添加至返回中
输出格式
1.JSON格式最外层键名为'采购需求'
2.层次关系用嵌套键值对表示
3.嵌套键名为系统或货物或模块名称与原文保持一致
4.最内层键值应为空列表[]
5.不包含'说明''规格''技术参数'等列内容仅返回采购的货物或系统或模块名称
输出格式
1.JSON格式最外层键名为'采购需求'
2.层次关系用嵌套键值对表示
3.嵌套键名为系统或货物或模块名称与原文保持一致
4.最内层键值应为空列表[]
特殊情况处理
若同一层级如同一系统中下存在同名但采购要求不同的货物'货物名-编号'区分编号从1递增例如若同层级下存在两种型号的交换机那么命名分别是'交换机-1''交换机-2'以规避重复键名否则无需在名称后添加编号
特殊情况处理
若同一层级如同一系统中下存在同名但采购要求不同的货物'货物名-编号'区分编号从1递增例如若同层级下存在两种型号的交换机那么命名分别是'交换机-1''交换机-2'以规避重复键名否则无需在名称后添加编号
示例输出1普通系统货物类采购
{{
示例输出1普通系统货物类采购
{{
"采购需求": {{
"交换机-1": [],
"交换机-2": [],
@ -409,9 +390,9 @@ def get_technical_requirements(file_path,invalid_path,processed_filepath):
"LED全彩显示屏": []
// 其他系统和货物
}}
}}
示例输出2系统软件采购
{{
}}
示例输出2软件系统类采购
{{
"采购需求": {{
"信息管理系统": {{
"通用模块":[],
@ -422,19 +403,18 @@ def get_technical_requirements(file_path,invalid_path,processed_filepath):
"权限管理模块":[]
}},
"XX管理系统":[],
"XX管理系统":[]
}}
//其他系统
}}
}}
文件内容{full_text}
文件内容{full_text}
注意事项
1.严格按照上述要求执行确保输出准确性和规范性
2.如有任何疑问或不确定内容请保留原文描述必要时使用'未知'标注
'''
注意事项
1.严格按照上述要求执行确保输出准确性和规范性
'''
if '' in judge_res:
print("no!调用invalid_path")
file_id=upload_file(invalid_path)
print("调用invalid_path")
model_res=qianwen_long(file_id,prompt_template1)
print(model_res)
else:
@ -444,7 +424,6 @@ def get_technical_requirements(file_path,invalid_path,processed_filepath):
model_res=doubao_model(user_query)
# model_res = qianwen_long(file_id,prompt_template1)
print(model_res)
cleaned_res = clean_json_string(model_res) #转字典
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:{'交通标志.标志牌铝板', '交通信号灯.交换机'}
@ -571,16 +550,17 @@ def test_all_files_in_folder(input_folder, output_folder):
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\fsdownload\5950ad84-30c8-4643-b6de-b13ef5be7a5c\ztbfile.pdf"
truncate_docfile=r"C:\Users\Administrator\Desktop\货物标\output1\招标文件(107国道)_procurement.docx"
truncate_file=r'C:\Users\Administrator\Desktop\fsdownload\e702f1e6-095d-443d-bb7d-ef2e42037cb1\ztbfile_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"
# file_id = upload_file(truncate_file)
invalid_path="C:\\Users\\Administrator\\Desktop\\fsdownload\\a110ed59-00e8-47ec-873a-bd4579a6e628\\ztbfile.pdf"
invalid_path=r"C:\Users\Administrator\Desktop\fsdownload\a110ed59-00e8-47ec-873a-bd4579a6e628\ztbfile.pdf"
# file_id=upload_file(truncate_file)
# processed_filepath = pdf2txt(truncate_file)
processed_filepath=r"C:\Users\Administrator\Desktop\fsdownload\5950ad84-30c8-4643-b6de-b13ef5be7a5c\tmp\extract1.txt"
res=get_technical_requirements(truncate_file,invalid_path,processed_filepath)
processed_filepath = pdf2txt(truncate_file)
# processed_filepath=r"C:\Users\Administrator\Desktop\fsdownload\e702f1e6-095d-443d-bb7d-ef2e42037cb1\金水河沿线排涝泵站提档升级项目.txt"
res=get_technical_requirements(truncate_docfile,invalid_path,processed_filepath)
json_string = json.dumps(res, ensure_ascii=False, indent=4)
print(json_string)
# # input_folder = "C:\\Users\\Administrator\\Desktop\\货物标\\output1"

View File

@ -64,7 +64,8 @@ def fetch_procurement_reqs(procurement_path, invalid_path):
# TODO:技术要求可以在技术参数之后执行,把完整的技术参数输入,问大模型,除了上述内容还有哪些,这样的话把技术标和其他的区分开。
# TODO: 094有问题
# TODO:0362
if __name__ == "__main__":
start_time = time.time()
output_folder = "C:\\Users\\Administrator\\Desktop\\货物标\\货物标output"

View File

@ -225,7 +225,14 @@ def combine_evaluation_standards(truncate_file):
user_query = (
"""
根据该文档中的评分标准表格中的内容请你列出该文件的技术评分商务评分投标报价评审以及它们对应的具体评分要求请以json格式返回结果最外层键名分别是'技术评分','商务评分','投标报价评分',请在这三大项评分中分别用若干键值对表示具体评分项外层键名为各评审因素键值为一个列表列表中包含若干可为一描述该评审因素的评分及要求的字典内层键名分别是'评分''要求'若无评分可删去'评分'键值对'要求'中说明了该评审因素的评分标准若这三大项评分中存在其他信息则在相应评分大块内部新增键名'备注'存放该信息键值为具体的要求否则不需要如果评分内容因素不是这三大项则返回文档中给定的评分内容因素以及它们的具体评分要求
以下为需要考虑的注意事项1.不要回答有关资格审查符合性审查的内容也不要从评标办法正文中表格外提取回答 2.若大项的'xx评分'要求未在文中说明则键名'xx评分'的键值设为'本项目无xx评分项'例如"技术评分":"本项目无技术评分项" 3. 如果该招标活动有多个包则最外层键名为对应的包名,否则不需要 4.你无需将表格的单元格内的内容进行拆分需要将它视为一个整体以下为示例输出仅供格式参考
要求与指南
1.请首先定位评分细则的表格不要回答有关资格审查符合性审查的内容也不要从评标办法正文中表格外提取回答
2.若大项的'xx评分'要求未在文中说明则键名'xx评分'的键值设为'本项目无xx评分项'例如"技术评分":"本项目无技术评分项"
3. 如果该招标活动有多个包则最外层键名为对应的包名,否则不需要
4.你无需将表格的单元格内的内容进行拆分需要将它视为一个整体
5. '评分'的键值不能是一个范围数字'0-5分'应该是一个具体数字'5分'或者是一个定性的指标如'合格制'
以下为示例输出仅供格式参考
{
"一包": {
"技术评分": {