11.13 无效投标
This commit is contained in:
parent
de9a8d46d6
commit
b61d240957
@ -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))
|
||||||
|
@ -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) #按段落读取
|
||||||
|
@ -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("技术评分", {})}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user