截取pdf工程/货物尝试合并
This commit is contained in:
parent
6c5163b2fb
commit
8aa7875a52
@ -18,7 +18,7 @@ def judge_zbfile(file_path):
|
|||||||
若有未涵盖的类型,但其内容明确表达了项目需求、采购或招标信息,且包含指导投标人参与的关键要素,则可视为招标文件。
|
若有未涵盖的类型,但其内容明确表达了项目需求、采购或招标信息,且包含指导投标人参与的关键要素,则可视为招标文件。
|
||||||
请基于上述内容判断文件是否属于招标文件。
|
请基于上述内容判断文件是否属于招标文件。
|
||||||
"""
|
"""
|
||||||
file_id = upload_file(pdf_path)
|
file_id = upload_file(file_path)
|
||||||
model_res = qianwen_long(file_id, user_query)
|
model_res = qianwen_long(file_id, user_query)
|
||||||
print(f"判断是否属于招标文件:{model_res}")
|
print(f"判断是否属于招标文件:{model_res}")
|
||||||
if '否' in model_res:
|
if '否' in model_res:
|
||||||
|
@ -373,7 +373,7 @@ def extract_pages_tobidders_notice(pdf_path, begin_pattern, begin_page, common_h
|
|||||||
# 定义基础的 mid_pattern
|
# 定义基础的 mid_pattern
|
||||||
base_mid_pattern = r'^\s*(?:[((]\s*[一二12]?\s*[))]\s*[、..]*|' \
|
base_mid_pattern = r'^\s*(?:[((]\s*[一二12]?\s*[))]\s*[、..]*|' \
|
||||||
r'[一二12][、..]+|[、..]+)\s*(说\s*明|总\s*则|名\s*词\s*解\s*释)' \
|
r'[一二12][、..]+|[、..]+)\s*(说\s*明|总\s*则|名\s*词\s*解\s*释)' \
|
||||||
r'|(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!“\s*)(?<!”\s*)(?:投标人?|磋商|谈判|供应商|应答人)\s*须知正文\s*$'
|
r'|(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!“\s*)(?<!”\s*)(?:投标人?|磋商|谈判|供应商|应答人).*须知正文\s*$'
|
||||||
|
|
||||||
# 合并基础模式和额外模式
|
# 合并基础模式和额外模式
|
||||||
if additional_mid_pattern:
|
if additional_mid_pattern:
|
||||||
@ -440,8 +440,8 @@ def extract_pages_tobidders_notice(pdf_path, begin_pattern, begin_page, common_h
|
|||||||
else:
|
else:
|
||||||
# 定义新的 begin_pattern 和 end_pattern
|
# 定义新的 begin_pattern 和 end_pattern
|
||||||
new_begin_pattern = regex.compile(
|
new_begin_pattern = regex.compile(
|
||||||
r'.*(?:投标人|磋商|谈判|供应商|应答人)须知\s*$|'
|
r'.*(?:投标人|磋商|谈判|供应商|应答人|比选申请人).*须知\s*$|'
|
||||||
r'(?:一\s*、\s*)?(?:投标人?|磋商|谈判|供应商|应答人)须知前附表',
|
r'(?:一\s*、\s*)?(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知前附表',
|
||||||
regex.MULTILINE
|
regex.MULTILINE
|
||||||
)
|
)
|
||||||
new_end_pattern = regex.compile(
|
new_end_pattern = regex.compile(
|
||||||
@ -458,7 +458,7 @@ def extract_pages_tobidders_notice(pdf_path, begin_pattern, begin_page, common_h
|
|||||||
def extract_pages_twice_tobidders_notice(pdf_document, common_header, begin_page):
|
def extract_pages_twice_tobidders_notice(pdf_document, common_header, begin_page):
|
||||||
output_suffix = "tobidders_notice"
|
output_suffix = "tobidders_notice"
|
||||||
begin_pattern = regex.compile(
|
begin_pattern = regex.compile(
|
||||||
r'^第[一二三四五六七八九十百千]+(?:章|部分).*(?:(?:投标人?|磋商|谈判|供应商|应答人)须知)+',
|
r'^第[一二三四五六七八九十百千]+(?:章|部分).*(?:(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知)+',
|
||||||
regex.MULTILINE
|
regex.MULTILINE
|
||||||
)
|
)
|
||||||
end_pattern = regex.compile(
|
end_pattern = regex.compile(
|
||||||
|
@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
2.该招标文件的项目概况(或工程概况)是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。
|
2.该招标文件的项目概况(或工程概况)是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。
|
||||||
|
|
||||||
3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',键值为具体金额,与原文保持一致,特别注意若原文中存在单位'万',不要省略;若存在未知信息,在对应的键值中填'未知'。
|
3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',键值为具体金额,与原文保持一致,特别注意若原文中存在单位'万',不要省略;若存在未知信息,在对应的键值中填'未知'。示例输出如下,仅供格式参考:
|
||||||
|
{
|
||||||
|
"招标控制价":"48万元"
|
||||||
|
}
|
||||||
|
|
||||||
4.投标文件(或响应文件)递交截止时间是?递交地点(或方式)是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交地点'(或'投标文件递交方式'),键值为原文中相关内容的表述,若存在未知信息,在对应的键值中填'未知',示例输出如下,仅供格式参考:
|
4.投标文件(或响应文件)递交截止时间是?递交地点(或方式)是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交地点'(或'投标文件递交方式'),键值为原文中相关内容的表述,若存在未知信息,在对应的键值中填'未知',示例输出如下,仅供格式参考:
|
||||||
{
|
{
|
||||||
|
@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
2.该招标文件的项目概况是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,而嵌套键值必须与原文保持一致,若存在未知信息,在对应的键值中填'未知'。
|
2.该招标文件的项目概况是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,而嵌套键值必须与原文保持一致,若存在未知信息,在对应的键值中填'未知'。
|
||||||
|
|
||||||
3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',键值为具体金额,与原文保持一致,特别注意若原文中存在单位'万',不要省略;若存在未知信息,在对应的键值中填'未知'。
|
3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',键值为具体金额,与原文保持一致,特别注意若原文中存在单位'万',不要省略;若存在未知信息,在对应的键值中填'未知'。示例输出如下,仅供格式参考:
|
||||||
|
{
|
||||||
|
"招标控制价":"48万元"
|
||||||
|
}
|
||||||
|
|
||||||
4.投标文件(或响应文件)递交截止时间是?递交地点(或方式)是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交地点'(或'投标文件递交方式'),键值为原文中相关内容的表述,若存在未知信息,在对应的键值中填'未知',示例输出如下,仅供格式参考:
|
4.投标文件(或响应文件)递交截止时间是?递交地点(或方式)是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交地点'(或'投标文件递交方式'),键值为原文中相关内容的表述,若存在未知信息,在对应的键值中填'未知',示例输出如下,仅供格式参考:
|
||||||
{
|
{
|
||||||
|
@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
2.该招标文件的项目概况(或工程概况)是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。
|
2.该招标文件的项目概况(或工程概况)是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。
|
||||||
|
|
||||||
3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',键值为具体金额,与原文保持一致,特别注意若原文中存在单位'万',不要省略;若存在未知信息,在对应的键值中填'未知'。
|
3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',键值为具体金额,与原文保持一致,特别注意若原文中存在单位'万',不要省略;若存在未知信息,在对应的键值中填'未知'。示例输出如下,仅供格式参考:
|
||||||
|
{
|
||||||
|
"招标控制价":"48万元"
|
||||||
|
}
|
||||||
|
|
||||||
4.投标文件递交截止日期是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若原文未提及明确日期时间,请返回原文对应的内容,若存在未知信息,在对应的键值中填'未知'。示例输出格式如下:
|
4.投标文件递交截止日期是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若原文未提及明确日期时间,请返回原文对应的内容,若存在未知信息,在对应的键值中填'未知'。示例输出格式如下:
|
||||||
{
|
{
|
||||||
|
@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
2.该招标文件的项目概况是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,而嵌套键值必须与原文保持一致,若存在未知信息,在对应的键值中填'未知'。
|
2.该招标文件的项目概况是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,而嵌套键值必须与原文保持一致,若存在未知信息,在对应的键值中填'未知'。
|
||||||
|
|
||||||
3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',键值为具体金额,与原文保持一致,特别注意若原文中存在单位'万',不要省略;若存在未知信息,在对应的键值中填'未知'。
|
3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',键值为具体金额,与原文保持一致,特别注意若原文中存在单位'万',不要省略;若存在未知信息,在对应的键值中填'未知'。示例输出如下,仅供格式参考:
|
||||||
|
{
|
||||||
|
"招标控制价":"48万元"
|
||||||
|
}
|
||||||
|
|
||||||
4.投标文件(或响应文件)递交截止时间是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若原文未提及明确日期时间,请返回原文对应的内容,若存在未知信息,在对应的键值中填'未知'。示例输出格式如下:
|
4.投标文件(或响应文件)递交截止时间是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若原文未提及明确日期时间,请返回原文对应的内容,若存在未知信息,在对应的键值中填'未知'。示例输出格式如下:
|
||||||
{
|
{
|
||||||
|
@ -1,20 +1,23 @@
|
|||||||
import re
|
import regex
|
||||||
|
|
||||||
cleaned_text = """第三章 评标办法 (综合评分法)
|
# 新的正则表达式
|
||||||
一、评标原则
|
begin_pattern = regex.compile(
|
||||||
1.评标将本着公平、公正、科学、择优的原则进行。
|
r'^第[一二三四五六七八九十百千]+(?:章|部分).*(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知+|'
|
||||||
2.依法评标、严格保密。
|
r'(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!"\s*)(?<!"\s*)(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知前附表\s*$',
|
||||||
...
|
regex.MULTILINE
|
||||||
8.投标文件 含有招标人不能接受的附加条件的;
|
)
|
||||||
"""
|
|
||||||
|
|
||||||
end_pattern = '^(?:第[一二三四五六七八九十百千]+(?:章|部分)\s*[\u4e00-\u9fff]+|评标办法前附表|附录(?:一)?[::]|附件(?:一)?[::]|附表(?:一)?[::]'
|
# 测试文本
|
||||||
matches = list(re.finditer(end_pattern, cleaned_text, re.MULTILINE))
|
test_texts = [
|
||||||
|
"第一章 投标人 须知", # 匹配
|
||||||
|
"第九章 磋商 123 须知", # 匹配
|
||||||
|
"第十章 谈判一些内容须知", # 匹配
|
||||||
|
"第二章 投标人123abc须知前附表", # 匹配
|
||||||
|
"第一部分 供应商\n须知", # 不匹配,因为有换行
|
||||||
|
"第八章 其他内容须知" # 不匹配
|
||||||
|
]
|
||||||
|
|
||||||
if matches:
|
# 测试匹配
|
||||||
end_index = matches[-1].start()
|
for idx, text in enumerate(test_texts):
|
||||||
cleaned_text = cleaned_text[:end_index]
|
match = begin_pattern.search(text)
|
||||||
print("匹配成功,截断后文本:")
|
print(f"Test case {idx + 1}: {'Matched' if match else 'Not Matched'}")
|
||||||
print(cleaned_text)
|
|
||||||
else:
|
|
||||||
print("未匹配到内容。")
|
|
||||||
|
@ -68,7 +68,7 @@ def extract_pages_tobidders_notice(pdf_path, output_folder, begin_pattern, begin
|
|||||||
# 定义基础的 mid_pattern
|
# 定义基础的 mid_pattern
|
||||||
base_mid_pattern = r'^\s*(?:[((]\s*[一二12]?\s*[))]\s*[、..]*|' \
|
base_mid_pattern = r'^\s*(?:[((]\s*[一二12]?\s*[))]\s*[、..]*|' \
|
||||||
r'[一二12][、..]+|[、..]+)\s*(说\s*明|总\s*则|名\s*词\s*解\s*释)' \
|
r'[一二12][、..]+|[、..]+)\s*(说\s*明|总\s*则|名\s*词\s*解\s*释)' \
|
||||||
r'|(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!“\s*)(?<!”\s*)(?:投标人?|磋商|谈判|供应商|应答人)\s*须知正文\s*$'
|
r'|(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!“\s*)(?<!”\s*)(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知正文\s*$'
|
||||||
# 合并基础模式和额外模式
|
# 合并基础模式和额外模式
|
||||||
if additional_mid_pattern:
|
if additional_mid_pattern:
|
||||||
combined_mid_pattern = regex.compile(
|
combined_mid_pattern = regex.compile(
|
||||||
@ -179,9 +179,7 @@ def extract_pages_twice(pdf_path, output_folder, output_suffix, common_header, l
|
|||||||
)
|
)
|
||||||
# 定义结束匹配模式 - 章节标题、评标附表、投标人须知等
|
# 定义结束匹配模式 - 章节标题、评标附表、投标人须知等
|
||||||
end_pattern_chapter = regex.compile(
|
end_pattern_chapter = regex.compile(
|
||||||
r'第[一二三四五六七八九]+(?:章|部分)\s*[\u4e00-\u9fff、()()]+\s*$|'
|
r'第[一二三四五六七八九]+(?:章|部分)\s*[\u4e00-\u9fff、()()]+\s*$|',
|
||||||
r'\s*评标(?:办法|方法)前附表\s*$|'
|
|
||||||
r'投标人须知',
|
|
||||||
regex.MULTILINE
|
regex.MULTILINE
|
||||||
)
|
)
|
||||||
start_page = None
|
start_page = None
|
||||||
@ -316,8 +314,8 @@ def truncate_pdf_main_engineering(input_path, output_folder, selection, logger,
|
|||||||
pattern_pairs = [
|
pattern_pairs = [
|
||||||
(
|
(
|
||||||
regex.compile(
|
regex.compile(
|
||||||
r'^第[一二三四五六七八九十百千]+(?:章|部分).*(?:投标人?|磋商|谈判|供应商|应答人)须知+|'
|
r'^第[一二三四五六七八九十百千]+(?:章|部分).*(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知+|'
|
||||||
r'(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!"\s*)(?<!"\s*)(?:投标人?|磋商|谈判|供应商|应答人)须知前附表\s*$',
|
r'(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!"\s*)(?<!"\s*)(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知前附表\s*$',
|
||||||
regex.MULTILINE
|
regex.MULTILINE
|
||||||
),
|
),
|
||||||
regex.compile(
|
regex.compile(
|
||||||
@ -327,8 +325,8 @@ def truncate_pdf_main_engineering(input_path, output_folder, selection, logger,
|
|||||||
),
|
),
|
||||||
(
|
(
|
||||||
regex.compile(
|
regex.compile(
|
||||||
r'.*(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!“\s*)(?<!”\s*)(?:投标人?|磋商|谈判|供应商|应答人)须知\s*$|'
|
r'.*(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!“\s*)(?<!”\s*)(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知\s*$|'
|
||||||
r'(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!“\s*)(?<!”\s*)(?:投标人?|磋商|谈判|供应商|应答人)须知前附表\s*$',
|
r'(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!“\s*)(?<!”\s*)(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知前附表\s*$',
|
||||||
regex.MULTILINE
|
regex.MULTILINE
|
||||||
),
|
),
|
||||||
regex.compile(
|
regex.compile(
|
||||||
|
@ -267,8 +267,8 @@ def truncate_pdf_main_goods(input_path, output_folder, selection,logger, output_
|
|||||||
local_output_suffix = "qualification1"
|
local_output_suffix = "qualification1"
|
||||||
elif selection == 4:
|
elif selection == 4:
|
||||||
begin_pattern = regex.compile(
|
begin_pattern = regex.compile(
|
||||||
r'^第[一二三四五六七八九十百千]+(?:章|部分).*(?:投标人?|磋商|谈判|供应商|应答人)须知+|'
|
r'^第[一二三四五六七八九十百千]+(?:章|部分).*(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知+|'
|
||||||
r'(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!"\s*)(?<!"\s*)(?:投标人?|磋商|谈判|供应商|应答人)须知前附表\s*$',
|
r'(?<!见\s*)(?<!与\s*)(?<!"\s*)(?<!"\s*)(?<!"\s*)(?:投标人?|磋商|谈判|供应商|应答人|比选申请人).*须知前附表\s*$',
|
||||||
regex.MULTILINE
|
regex.MULTILINE
|
||||||
)
|
)
|
||||||
end_pattern = None
|
end_pattern = None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user