diff --git a/flask_app/general/无效标和废标公共代码.py b/flask_app/general/无效标和废标公共代码.py index 3cb34ab..de2e9dc 100644 --- a/flask_app/general/无效标和废标公共代码.py +++ b/flask_app/general/无效标和废标公共代码.py @@ -19,9 +19,12 @@ def clean_dict_datas(extracted_contents, keywords, excludes): # 让正则表达 # 定义用于分割句子的正则表达式,包括中文和西文的结束标点 split_pattern = r'(?<=[。!?\!\?])' clean_pattern = (r'^\s*(?:[((]\s*\d+\s*[)))]|' - r'[A-Za-z]?\d+(?:\.\s*\d+)*[\s\.、.)\)]?|' #12.1 + r'[A-Za-z]?\d+(?:\.\s*\d+)+[\s*\.、.))]?|' #12.1 r'[一二三四五六七八九十]+、|' - r'[A-Za-z][))\.、.]?\s*)') + r'[A-Za-z]\s*[))\.、.]?\s*)|' + r'\d+\s*[))\.、.]?\s*|' + r'[\s*\.、.))]?') + idx = 0 # 共享的序号标记 for key, text_list in extracted_contents.items(): if len(text_list) == 1: @@ -31,10 +34,10 @@ def clean_dict_datas(extracted_contents, keywords, excludes): # 让正则表达 if any(exclude in data for exclude in excludes): continue # 如果包含任何排除字符串,跳过这个数据 # 去掉开头的序号,eg:1 | (1) |(2) | 1. | 2.(全角点)| 3、 | 1.1 | 2.3.4 | A1 | C1.1 | 一、 - print("--------------") - print(data) + # print("---------") + # print(data) data = re.sub(clean_pattern, '', data).strip() - print(data) + # print(data) keyword_match = re.search(keywords, data) if keyword_match: # 从关键词位置开始查找结束标点符号 @@ -100,6 +103,8 @@ def preprocess_paragraphs(elements): pattern_numeric_header_fallback = re.compile( r'^(\d+\.)\s*(.+)$' # 匹配如 '12. 内容' ) + # pattern_numbered = re.compile(r'^\s*([一二三四五六七八九十]{1,2})\s*、\s*') + # pattern_parentheses = re.compile(r'^\s*[((]\s*([一二三四五六七八九十]{1,2})\s*[))]\s*') # 是否存在连续超过指定长度的空白字符序列: 排除遇到表格、填空的情况 def has_long_spaces(text, max_space_count=5): @@ -143,6 +148,7 @@ def preprocess_paragraphs(elements): continue try: current_text = elements[index].text.strip() # 去除当前段落的前后空白 + # print(current_text) except AttributeError: # 如果段落对象没有 text 属性,跳过该段落 index += 1 @@ -192,7 +198,7 @@ def preprocess_paragraphs(elements): index = skip_index continue # 继续下一个循环 - # 检查是否为以数字序号开头的段落 + # 检查是否为以数字序号开头的段落eg:11.2 match = pattern_numeric_header.match(current_text) if not match: match = pattern_numeric_header_fallback.match(current_text) @@ -585,54 +591,54 @@ def combine_find_invalid(invalid_docpath, output_dir): os.path.join(output_dir, "temp1.txt"), "否决和无效投标情形" ), -# ( -# r'废\s*标', -# """以下是从招标文件中摘取的内容,文本中序号分明,文本内之间的信息以'...............'分割。 -# 任务目标: -# 请根据以下内容,筛选出 废标项的情况 (明确描述导致 废标 的情况)并返回对应的序号。 -# 要求与指南: -# 文本中可能存在无关的信息,请准确筛选符合条件的信息,并将符合条件的信息的序号返回。 -# 输出格式: -# 返回结果以 [x, x, x] 的形式,其中 x 为符合条件的信息的序号,为自然数。无需额外返回解释与说明。 -# 如果文本中没有任何符合条件的废标情况,请返回 []。 -# 示例输出,仅供格式参考: -# [1,3,4,6] -# 文本内容:{full_text} -# """, -# os.path.join(output_dir, "temp2.txt"), -# "废标项" -# ), -# ( -# r'不\s*得(?!\s*(分|力))|禁\s*止\s*投\s*标', -# """以下是从招标文件中摘取的内容,文本中序号分明,文本内的条款以'...............'分割。条款规定了各方不得存在的情形。请根据以下要求进行筛选: -# **投标相关主体与非投标相关主体的定义**: -# 投标相关主体:包括但不限于“投标人”、“中标人”、“供应商”、“联合体投标各方”、“响应人”、“应答人”或其他描述投标方的词语。 -# 非投标相关主体:包括但不限于“招标人”、“采购人”、“评标委员会”或其他描述非投标方的词语。 -# **筛选要求**: -# 1. **仅筛选**明确描述投标相关主体禁止情形或不得存在的情形的条款,不包含笼统或未具体说明情形的条款。例如: -# 若条款内容包含'投标人不得存在的其他关联情形'这样的笼统描述,而未说明具体的情形,则无需添加该条款。 -# 2. **排除**仅描述非投标相关主体行为限制或禁止情形的条款,例如“招标人不得泄露信息”或“评标委员会不得收受贿赂”,则无需返回。 -# 3. 若条款同时描述了对投标相关主体与非投标相关主体的行为限制、禁止情形,也需返回。 -# 4. **特殊情况**:如果条款中包含“磋商小组”、”各方“等既能指代投标相关主体又能指代非投标相关主体的词汇: -# 若在语境中其指代或包含投标相关主体,则应将其考虑在内;否则,排除该条款。 -# -# **输出格式**: -# 返回结果以 [x, x, x] 的形式,其中 x 为符合条件的条款的序号,为自然数。无需额外返回解释与说明。 -# 如果没有符合条件的条款,返回 `[]`。 -# **示例**: -# - **符合条件**: -# - `1. 投标人不得...` → 包含,返回序号 1。 -# - `3. 联合体投标各方不得...` → 包含,返回序号 3。 -# - **不符合条件**: -# - `2. 采购人不得...` → 主语为“采购人”,排除。 -# -示例输出: [1,3] -# 请根据上述筛选要求,阅读以下文本内容,并返回符合条件的条款序号, -# -# 文本内容:{full_text} -# """, -# os.path.join(output_dir, "temp3.txt"), -# "不得存在的情形" -# ) + ( + r'废\s*标', + """以下是从招标文件中摘取的内容,文本中序号分明,文本内之间的信息以'...............'分割。 +任务目标: +请根据以下内容,筛选出 废标项的情况 (明确描述导致 废标 的情况)并返回对应的序号。 +要求与指南: + 文本中可能存在无关的信息,请准确筛选符合条件的信息,并将符合条件的信息的序号返回。 +输出格式: + 返回结果以 [x, x, x] 的形式,其中 x 为符合条件的信息的序号,为自然数。无需额外返回解释与说明。 + 如果文本中没有任何符合条件的废标情况,请返回 []。 +示例输出,仅供格式参考: + [1,3,4,6] +文本内容:{full_text} + """, + os.path.join(output_dir, "temp2.txt"), + "废标项" + ), + ( + r'不\s*得(?!\s*(分|力))|禁\s*止\s*投\s*标', + """以下是从招标文件中摘取的内容,文本中序号分明,文本内的条款以'...............'分割。条款规定了各方不得存在的情形。请根据以下要求进行筛选: +**投标相关主体与非投标相关主体的定义**: + 投标相关主体:包括但不限于“投标人”、“中标人”、“供应商”、“联合体投标各方”、“响应人”、“应答人”或其他描述投标方的词语。 + 非投标相关主体:包括但不限于“招标人”、“采购人”、“评标委员会”或其他描述非投标方的词语。 +**筛选要求**: +1. **仅筛选**明确描述投标相关主体禁止情形或不得存在的情形的条款,不包含笼统或未具体说明情形的条款。例如: + 若条款内容包含'投标人不得存在的其他关联情形'这样的笼统描述,而未说明具体的情形,则无需添加该条款。 +2. **排除**仅描述非投标相关主体行为限制或禁止情形的条款,例如“招标人不得泄露信息”或“评标委员会不得收受贿赂”,则无需返回。 +3. 若条款同时描述了对投标相关主体与非投标相关主体的行为限制、禁止情形,也需返回。 +4. **特殊情况**:如果条款中包含“磋商小组”、”各方“等既能指代投标相关主体又能指代非投标相关主体的词汇: + 若在语境中其指代或包含投标相关主体,则应将其考虑在内;否则,排除该条款。 + +**输出格式**: + 返回结果以 [x, x, x] 的形式,其中 x 为符合条件的条款的序号,为自然数。无需额外返回解释与说明。 + 如果没有符合条件的条款,返回 `[]`。 +**示例**: +- **符合条件**: + - `1. 投标人不得...` → 包含,返回序号 1。 + - `3. 联合体投标各方不得...` → 包含,返回序号 3。 +- **不符合条件**: + - `2. 采购人不得...` → 主语为“采购人”,排除。 +-示例输出: [1,3] +请根据上述筛选要求,阅读以下文本内容,并返回符合条件的条款序号, + +文本内容:{full_text} + """, + os.path.join(output_dir, "temp3.txt"), + "不得存在的情形" + ) ] results = []