11.13 无效投标

This commit is contained in:
zy123 2024-11-13 14:59:54 +08:00
parent de9a8d46d6
commit b61d240957
3 changed files with 24 additions and 7 deletions

View File

@ -333,6 +333,7 @@ def clean_dict_datas(extracted_contents, keywords, excludes): # 让正则表达
return all_texts1, all_texts2 # all_texts1要额外用gpt all_text2直接返回结果 return all_texts1, all_texts2 # all_texts1要额外用gpt all_text2直接返回结果
#从表格中提取数据
def extract_table_with_keywords(data, keywords, follow_up_keywords): def extract_table_with_keywords(data, keywords, follow_up_keywords):
"""遍历列表中的每个元素,查找并返回包含关键词的句子列表,并根据是否存在后续关键词分别存储到两个列表中。""" """遍历列表中的每个元素,查找并返回包含关键词的句子列表,并根据是否存在后续关键词分别存储到两个列表中。"""
sentences1 = [] # 保存没有后续关键词的情况 sentences1 = [] # 保存没有后续关键词的情况
@ -468,7 +469,7 @@ def extract_values_if_contains(data, includes):
def handle_query(file_path, user_query, output_file, result_key, keywords): def handle_query(file_path, user_query, output_file, result_key, keywords):
try: try:
excludes = ["说明表", "重新招标", "否决所有", "否决投标的条件", "备注:", "本人保证:", "我方"] excludes = ["说明表", "重新招标", "否决所有", "否决投标的条件", "备注:", "本人保证:", "我方"]
follow_up_keywords = [r'\s*形\s*之\s*一', r'\s*况\s*之\s*一', r'\s*列', r'\s*下'] follow_up_keywords = [r'\s*形\s*之\s*一', r'\s*况\s*之\s*一', r'\s*列', r'\s*下','\s*他\s*情\s*形\s*','\s*他\s*情\s*形\s*:']
extracted_contents = extract_text_with_keywords(file_path, [keywords], follow_up_keywords) # 字典结果 extracted_contents = extract_text_with_keywords(file_path, [keywords], follow_up_keywords) # 字典结果
all_texts1, all_texts2 = clean_dict_datas(extracted_contents, keywords, excludes) # 列表 all_texts1, all_texts2 = clean_dict_datas(extracted_contents, keywords, excludes) # 列表
# table_data_list=read_docx_last_column(truncate_file) #从投标人须知前附表中提取信息生成列表data每个元素为'一行信息' # table_data_list=read_docx_last_column(truncate_file) #从投标人须知前附表中提取信息生成列表data每个元素为'一行信息'
@ -516,6 +517,7 @@ def handle_query(file_path, user_query, output_file, result_key, keywords):
# 以上是原文内容,文本内的信息以'...............'分割请你根据该信息回答否决投标或拒绝投标或无效投标或使投标失效的情况有哪些文本中可能存在无关的信息请你准确筛选所需的信息并返回。最终结果以json列表格式返回给我键名为'否决和无效投标情形',你的回答完全忠于原文内容,且回答内容与原文内容一致,要求完整与准确,不能擅自总结或者概括。", # 以上是原文内容,文本内的信息以'...............'分割请你根据该信息回答否决投标或拒绝投标或无效投标或使投标失效的情况有哪些文本中可能存在无关的信息请你准确筛选所需的信息并返回。最终结果以json列表格式返回给我键名为'否决和无效投标情形',你的回答完全忠于原文内容,且回答内容与原文内容一致,要求完整与准确,不能擅自总结或者概括。",
#"以上是从招标文件中摘取的内容,文本内之间的信息以'...............'分割,每条信息规定了各方不得存在的情形或是禁止投标的情形,在这些信息中,我作为投标方,需要关注和我相关的信息,请你筛选主语是投标人或中标人或供应商或联合体投标各方或磋商小组的信息,不要返回主语是招标人或采购人或评标委员会的信息,请你筛选所需的信息并将它的序号返回。请以[x,x,x]格式返回给我结果,示例返回为[1,4,6],若情况不存在,返回[]。", #"以上是从招标文件中摘取的内容,文本内之间的信息以'...............'分割,每条信息规定了各方不得存在的情形或是禁止投标的情形,在这些信息中,我作为投标方,需要关注和我相关的信息,请你筛选主语是投标人或中标人或供应商或联合体投标各方或磋商小组的信息,不要返回主语是招标人或采购人或评标委员会的信息,请你筛选所需的信息并将它的序号返回。请以[x,x,x]格式返回给我结果,示例返回为[1,4,6],若情况不存在,返回[]。",
#"以上是从招标文件中摘取的内容,文本内之间的信息以'...............'分割,每条信息规定了各方不得存在的情形,请回答:在这些信息中,主语是投标人或中标人或供应商或联合体投标各方或磋商小组的信息有哪些?不要返回主语是招标人或采购人或评标委员会的信息,请你筛选所需的信息并将它的序号返回。请以[x,x,x]格式返回给我结果,示例返回为[1,4,6],若情况不存在,返回[]。",
def combine_find_invalid(file_path, output_dir): def combine_find_invalid(file_path, output_dir):
@ -535,7 +537,7 @@ def combine_find_invalid(file_path, output_dir):
), ),
( (
r'\s*得|禁\s*止\s*投\s*标', r'\s*得|禁\s*止\s*投\s*标',
"以上是从招标文件中摘取的内容,文本内之间的信息以'...............'分割,每条信息规定了各方不得存在的情形,请回答:在这些信息中,主语是投标人或中标人或供应商或联合体投标各方或磋商小组的信息有哪些?不要返回主语是招标人或采购人或评标委员会的信息,请你筛选所需的信息并将它的序号返回。请以[x,x,x]格式返回给我结果,示例返回为[1,4,6],若情况不存在,返回[]", "以上是从招标文件中摘取的内容,文本内之间的信息以'...............'分割,每条信息规定了各方不得存在的情形,请回答:在这些信息中,投标人或中标人或供应商或联合体投标各方或磋商小组不得存在的情形或禁止投标的情形有哪些?不要返回主语是招标人或采购人或评标委员会的信息,请你筛选所需的信息并将它的序号返回。请以[x,x,x]格式返回给我结果,示例返回为[1,4,6],若情形不存在,返回[]。以下为需要考虑的注意事项:请返回包含实际内容的信息,若信息内容诸如'投标人不得存在的其他关联情形'这样笼统的表格,而未说明具体的情形,则无需添加这条信息",
os.path.join(output_dir, "temp3.txt"), os.path.join(output_dir, "temp3.txt"),
"不得存在的情形" "不得存在的情形"
) )
@ -580,8 +582,8 @@ if __name__ == '__main__':
# truncate_file="C:\\Users\\Administrator\\Desktop\\货物标\\output4\\招标文件实高电子显示屏_tobidders_notice_part1.docx" # truncate_file="C:\\Users\\Administrator\\Desktop\\货物标\\output4\\招标文件实高电子显示屏_tobidders_notice_part1.docx"
# clause_path = "D:\\flask_project\\flask_app\\static\\output\\output1\\77a48c63-f39f-419b-af2a-7b3dbf41b70b\\clause1.json" # clause_path = "D:\\flask_project\\flask_app\\static\\output\\output1\\77a48c63-f39f-419b-af2a-7b3dbf41b70b\\clause1.json"
# doc_path="C:\\Users\\Administrator\\Desktop\\货物标\\zbfilesdocx\\磋商文件(1).docx" # doc_path="C:\\Users\\Administrator\\Desktop\\货物标\\zbfilesdocx\\磋商文件(1).docx"
doc_path = r'D:\flask_project\flask_app\static\output\output1\6189605b-d0d3-4fc5-a5fa-1dba4ffc91f1\ztbfile_invalid.docx' doc_path = r'D:\flask_project\flask_app\static\output\output1\6bf9792c-49a0-4a6a-8203-14b001f87911\ztbfile_invalid.docx'
output_dir = r"D:\flask_project\flask_app\static\output\output1\6189605b-d0d3-4fc5-a5fa-1dba4ffc91f1\tmp" output_dir = r"D:\flask_project\flask_app\static\output\output1\6bf9792c-49a0-4a6a-8203-14b001f87911\tmp"
results = combine_find_invalid(doc_path, output_dir) results = combine_find_invalid(doc_path, output_dir)
end_time = time.time() end_time = time.time()
print("Results:", json.dumps(results, ensure_ascii=False, indent=4)) print("Results:", json.dumps(results, ensure_ascii=False, indent=4))

View File

@ -90,7 +90,7 @@ def read_docx_by_paragraphs(file_path):
return [] return []
if __name__ == "__main__": if __name__ == "__main__":
file_path = 'C:\\Users\\Administrator\\Desktop\\fsdownload\\a091d107-805d-4e28-b8b2-0c7327737238\\ztbfile.docx' file_path = r'D:\flask_project\flask_app\static\output\output1\6bf9792c-49a0-4a6a-8203-14b001f87911\ztbfile_invalid.docx'
read_docx(file_path) #按行读取 read_docx(file_path) #按行读取
# paragraphs = read_docx_by_paragraphs(file_path) #按段落读取 # paragraphs = read_docx_by_paragraphs(file_path) #按段落读取

View File

@ -114,11 +114,25 @@ def combine_evaluation_standards(evaluation_method):
# "根据该文档中的评标办法前附表,请你列出该文件的技术评分,商务评分,投标报价评审标准以及它们对应的具体评分要求,若对应内容中存在其他信息,在键名如'技术评分'中新增子键名'备注'存放该信息。如果评分内容因素不是这3个则返回文档中给定的评分内容因素以及它的评分要求。请以json格式返回结果不要回答有关形式、资格、响应性评审标准的内容") # "根据该文档中的评标办法前附表,请你列出该文件的技术评分,商务评分,投标报价评审标准以及它们对应的具体评分要求,若对应内容中存在其他信息,在键名如'技术评分'中新增子键名'备注'存放该信息。如果评分内容因素不是这3个则返回文档中给定的评分内容因素以及它的评分要求。请以json格式返回结果不要回答有关形式、资格、响应性评审标准的内容")
user_query_2 = ( user_query_2 = (
""" """
根据该文档中的评标办法前附表请你列出该文件的技术评分商务评分投标报价评审以及它们对应的具体评分要求请以json格式返回结果最外层键名分别是'技术评分','商务评分','投标报价评',请在这三大项评分中分别用若干键值对表示具体评分项外层键名为各评审因素键值为一个列表列表中包含若干可为一描述该评审因素的评分及要求的字典内层键名分别是'评分''要求'若无评分可删去'评分'键值对'要求'中说明了该评审因素的评分标准若这三大项评分中存在其他信息则在相应评分大块内部新增键名'备注'存放该信息键值为具体的要求否则不需要如果评分内容因素不是这三大项则返回文档中给定的评分内容因素以及它们的具体评分要求 根据该文档中的评标办法前附表请你列出该文件的技术评分商务评分投标报价评审以及它们对应的具体评分要求请以json格式返回结果最外层键名分别是'技术评分','商务评分','投标报价评',请在这三大项评分中分别用若干键值对表示具体评分项外层键名为各评审因素可能存在嵌套关系但最内层键值为一个列表列表中包含若干可为一描述该评审因素的评分及要求的字典内层键名分别是'评分''要求'若无评分可删去'评分'键值对'要求'中说明了该评审因素的评分标准若这三大项评分中存在其他信息则在相应评分大块内部新增键名'备注'存放该信息键值为具体的要求否则不需要如果评分内容因素不是这三大项则返回文档中给定的评分内容因素以及它们的具体评分要求
以下为需要考虑的注意事项1.不要回答有关资格审查的内容也不要从评标办法正文中提取回答 2.若大项的'xx评分'要求未在文中说明则键名'xx评分'的键值设为'本项目无xx评分项'例如"技术评分":"本项目无技术评分项" 3. 如果该招标活动有多个包则最外层键名为对应的包名,否则不需要 4.你无需将表格的单元格内的内容进行拆分需要将它视为一个整体以下为示例输出仅供格式参考 以下为需要考虑的注意事项1.不要回答有关资格审查的内容也不要从评标办法正文中提取回答 2.若大项的'xx评分'要求未在文中说明则键名'xx评分'的键值设为'本项目无xx评分项'例如"技术评分":"本项目无技术评分项" 3. 如果该招标活动有多个包则最外层键名为对应的包名,否则不需要 4.你无需将表格的单元格内的内容进行拆分需要将它视为一个整体以下为示例输出仅供格式参考
{ {
"一包": { "一包": {
"技术评分": { "技术评分": {
"实施方案":{
"总体实施方案":[
{
"评分":8,
"要求":"根据投标人总体实施方案进行评分"
}
],
"项目实施要点":[
{
"评分":8,
"要求":"根据投标人对项目实施要点、难点进行评分"
}
]
},
"主要监理岗位的职责": [ "主要监理岗位的职责": [
{ {
"评分": "4分", "评分": "4分",
@ -159,6 +173,7 @@ def combine_evaluation_standards(evaluation_method):
) )
evaluation_res = qianwen_long(file_id, user_query_2) evaluation_res = qianwen_long(file_id, user_query_2)
# print(evaluation_res)
target_values1 = ['技术标','技术部分','设计', '实施',"技术评分"] target_values1 = ['技术标','技术部分','设计', '实施',"技术评分"]
# target_values2=['投标报价','商务标','商务部分','报价部分','业绩','信誉','分值','计算公式','信用','人员','资格','奖项','认证','荣誉'] # target_values2=['投标报价','商务标','商务部分','报价部分','业绩','信誉','分值','计算公式','信用','人员','资格','奖项','认证','荣誉']
# update_json=combine_technical_and_business(clean_json_string(evaluation_res),target_values1,target_values2) # update_json=combine_technical_and_business(clean_json_string(evaluation_res),target_values1,target_values2)
@ -166,7 +181,7 @@ def combine_evaluation_standards(evaluation_method):
return update_json #商务标技术标整合 return update_json #商务标技术标整合
if __name__ == "__main__": if __name__ == "__main__":
# evaluation_method="C:\\Users\\Administrator\\Desktop\\招标文件\\招标01_evaluation_method.pdf" # evaluation_method="C:\\Users\\Administrator\\Desktop\\招标文件\\招标01_evaluation_method.pdf"
evaluation_method= "C:\\Users\\Administrator\\Desktop\\招标文件\\招标test文件夹\\tmp\\zbtest1_evaluation_method.pdf" evaluation_method= r"D:\flask_project\flask_app\static\output\output1\9a4e3bc3-8367-4529-87db-af0ea53dc348\ztbfile_evaluation_method.pdf"
evaluation_standards_res=combine_evaluation_standards(evaluation_method) evaluation_standards_res=combine_evaluation_standards(evaluation_method)
# 从结果中提取"商务标"和"技术标" # 从结果中提取"商务标"和"技术标"
technical_standards = {"技术评分": evaluation_standards_res.get("技术评分", {})} technical_standards = {"技术评分": evaluation_standards_res.get("技术评分", {})}