From 91c7dbcdd1614178cf9cc756c042ff01cb5c45d8 Mon Sep 17 00:00:00 2001 From: zy123 <646228430@qq.com> Date: Thu, 24 Oct 2024 14:34:37 +0800 Subject: [PATCH] 10.24 --- flask_app/static/提示词/填充ques.txt | 33 +++++++++++ flask_app/testdir/test.py | 84 ++++++++++++++++++++-------- flask_app/货物标/截取pdf货物标版.py | 9 +++ flask_app/货物标/技术要求提取.py | 2 +- 4 files changed, 105 insertions(+), 23 deletions(-) create mode 100644 flask_app/static/提示词/填充ques.txt diff --git a/flask_app/static/提示词/填充ques.txt b/flask_app/static/提示词/填充ques.txt new file mode 100644 index 0000000..e9a0884 --- /dev/null +++ b/flask_app/static/提示词/填充ques.txt @@ -0,0 +1,33 @@ +1.该文件为投标文件格式要求,请你根据该招标文件回答:法定代表人身份证应该附在哪个地方?你可能需要查找以下章节出现的地方:'法人代表身份证(正、反面复印件)', '法定代表人(负责人)证明';或者可能匹配的关键字:'法定代表', '法人代表',并确定所在章节。 +我需要将法定代表人身份证贴在该章节的最后面,目前我需要定位到插入的位置,请你返回给我插入位置的上下文,下文应该是下一章的章节名或开头内容,字数限制在30字以内,以json格式返回,键名分别是'上文','下文',上下文格式内容应完全与原文保持一致,不得擅自删减总结,示例输出如下: +{ +"上文":"投标人: (盖单位章) +年 月 日", +"下文":"四、投标保证金 +(招标人名称):" +} +2.该文件为投标文件格式要求,请你根据该招标文件回答:法定代表人授权人身份证应该附在哪个地方?你可能需要查找以下章节出现的地方:'法人代表授权人身份证复印件', '法定代表人授权证明';或者可能匹配的关键字:'法定代表人授权', '授权人身份证',并确定所在章节。 +我需要将法定代表人授权人身份证贴在该章节的最后面,目前我需要定位到插入的位置,请你返回给我插入位置的上下文,下文应该是下一章的章节名或开头内容,字数限制在30字以内,以json格式返回,键名分别是'上文','下文',上下文格式内容应完全与原文保持一致,不得擅自删减总结,示例输出如下: +{ +"上文":"投标人: (盖单位章) +年 月 日", +"下文":"四、投标保证金 +(招标人名称):" +} +5.采购人(招标人)和采购代理机构(或招标代理机构)和项目的联系方式是?请按json格式给我提供信息,外层键名分别是'招标人联系方式','招标代理机构联系方式',"项目联系方式",嵌套键名至少包含"名称"和"联系电话",若还有其他字段则添加在后面,若存在未知信息,在对应的键值中填'未知'。示例输出如下: +{ + "招标人联系方式":{ + "名称":"广水市中医医院", + "联系电话":"13972990000", + "地址":"洪山街道" + }, + "招标代理机构联系方式":{ + "名称":"湖北众恒永业工程项目管理有限公司广水分公司", + "联系电话":"13972991234" + }, + "项目联系方式":{ + "名称":"张三", + "联系电话":"未知" + } +} +6.投标文件(或响应文件)递交截止时间是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若存在未知信息,在对应的键值中填'未知'。 \ No newline at end of file diff --git a/flask_app/testdir/test.py b/flask_app/testdir/test.py index 8216a48..cf29231 100644 --- a/flask_app/testdir/test.py +++ b/flask_app/testdir/test.py @@ -1,24 +1,64 @@ +import json +from flask_app.general.json_utils import clean_json_string +from flask_app.general.多线程提问 import multi_threading,read_questions_from_file from flask_app.general.通义千问long import upload_file,qianwen_long -file_path="C:\\Users\\Administrator\\Desktop\\招标文件\\招标test文件夹\\zbtest19\\zbtest19_214-320.pdf" -user_query="""该文件为投标文件格式要求,请你根据该招标文件回答:营业执照应该附在哪个地方?你可能需要查找以下章节出现的地方:'具有独立承担民事责任能力的法人','投标人基本信息表','法人或者其他组织的营业执照等证明文件,自然人的身份证明','投标人情况介绍','投标人简介','企业相关证件'。 - 我需要将营业执照贴在该章节的最后面,目前我需要定位到插入的位置,请你返回给我插入位置的上下文,字数限制在30字以内,以json格式返回,键名分别是'上文','下文',上下文格式内容应完全与原文保持一致,不得擅自删减总结,示例输出如下: - { - "上文":"投标人: (盖单位章) - 年 月 日", - "下文":"四、投标保证金 - (招标人名称):" - } - """ -user_query2="""该文件为投标文件格式要求,请你根据该招标文件回答:法定代表人身份证应该附在哪个地方?你可能需要查找以下章节出现的地方:'法人代表身份证(正、反面复印件)','法定代表人(负责人)证明';或者可能匹配的关键字:'法定代表','法人代表'。 - 我需要将法定代表人身份证贴在该章节的最后面,目前我需要定位到插入的位置,请你返回给我插入位置的上下文,下文应该是下一章的章节名或开头内容,字数限制在30字以内,以json格式返回,键名分别是'上文','下文',上下文格式内容应完全与原文保持一致,不得擅自删减总结,示例输出如下: - { - "上文":"投标人: (盖单位章) - 年 月 日", - "下文":"四、投标保证金 - (招标人名称):" - } - """ -file_id=upload_file(file_path) -res=qianwen_long(file_id,user_query2) -print(res) \ No newline at end of file +# 从json文件中读取数据 +with open('test.json', 'r', encoding='utf-8') as f: + data_dict = json.load(f) + +# 定义目标名称列表 +target_names = [ + "营业执照", + "开户信息", + "法定代表人身份证", + "法定代表人授权人身份证", + # "人员证书", + # "人员社保资料", + # "劳动合同", + # "企业证书", + # "企业业绩", + # "财务信息(财务审计报告)", + # "财务信息(缴纳税收证明)", + # "财务信息(缴纳社保证明)" +] + +# 定义user_query模板 +def generate_user_query(target, chapters, keywords): + template = f"""该文件为投标文件格式要求的部分,请你根据该招标文件回答:{target}应该附在该文件哪个地方?你可能需要查找以下章节(若有):{', '.join([f"'{chapter}'" for chapter in chapters])};或者查找以下关键字出现的地方:{', '.join([f"'{kw}'" for kw in keywords])},你需要确定相关信息所在章节。 +我需要将{target}贴在该章节的最后面,但是在下一章(别的内容)之前,目前我需要定位到插入的位置,请你返回给我插入位置的上下文,其中下文应该是下一章的章节名或开头内容,字数限制在30字以内,以json格式返回,键名分别是'上文','下文',上下文格式内容应完全与原文保持一致,不得擅自删减总结,示例输出如下: +{{ +"上文":"投标人: (盖单位章) +年 月 日", +"下文":"四、投标保证金 +(招标人名称):" +}} +""" + return template + +# 生成user_query_list +user_query_list = [] + +for target in target_names: + if target in data_dict: + chapters = data_dict[target]["章节"] + keywords = data_dict[target]["关键字"] + user_query = generate_user_query(target, chapters, keywords) + user_query_list.append({ + "target": target, + "query": user_query + }) + else: + print(f"警告:'{target}'未在数据字典中找到相关信息。") + +# 将生成的查询添加到queries列表 +queries = [item['query'] for item in user_query_list] +truncate_file="C:\\Users\\Administrator\\Desktop\\招标文件\\招标test文件夹\\zbtest19\\zbtest19_214-320.pdf" +# 上传文件并获取file_id +file_id = upload_file(truncate_file) +# 使用multi_threading并行处理查询 +results = multi_threading(queries, "", file_id, 2) +# 清理返回结果并输出 +baseinfo_list = [clean_json_string(res) for _, res in results] if results else [] +for i in baseinfo_list: + print(json.dumps(i, ensure_ascii=False, indent=4)) diff --git a/flask_app/货物标/截取pdf货物标版.py b/flask_app/货物标/截取pdf货物标版.py index 743e780..caaa742 100644 --- a/flask_app/货物标/截取pdf货物标版.py +++ b/flask_app/货物标/截取pdf货物标版.py @@ -586,6 +586,15 @@ def truncate_pdf_main(input_path, output_folder, selection, output_suffix="defau r'^第[一二三四五六七八九十百千]+(?:章|部分)\s*[\u4e00-\u9fff]+',re.MULTILINE ) local_output_suffix = "notice" + elif selection==6: #投标文件格式 + begin_page=5 + begin_pattern=re.compile( + r'^第[一二三四五六七八九十百千]+(?:章|部分).*?(?:格式).*' + ) + end_pattern=re.compile( + r'^第[一二三四五六七八九十百千]+(?:章|部分)\s*[\u4e00-\u9fff]+', re.MULTILINE + ) + local_output_suffix = "format" else: print("无效的选择:请选择1-5") return None diff --git a/flask_app/货物标/技术要求提取.py b/flask_app/货物标/技术要求提取.py index c813949..e78a259 100644 --- a/flask_app/货物标/技术要求提取.py +++ b/flask_app/货物标/技术要求提取.py @@ -90,7 +90,7 @@ def get_technical_requirements(file_id): if no_keys_added: final_res = postprocess(cleaned_res) else: - user_query_template = "这是一份货物标中采购要求部分的内容,请你给出\"{}\"的技术参数(或采购要求)和数量,请以json格式返回结果,外层键名为\"{}\", 键值对中的键是你对该要求的总结,而值需要完全与原文保持一致,不可擅自总结删减。" + user_query_template = "这是一份货物标中采购要求部分的内容,请你给出\"{}\"的技术参数(或采购要求),请以json格式返回结果,外层键名为\"{}\", 键值对中的键是你对该要求的总结,而值需要完全与原文保持一致,不可擅自总结删减。" queries = [] for key in keys_list: # 将键中的 '.' 替换为 '下的'