51 lines
2.4 KiB
Python
51 lines
2.4 KiB
Python
|
def combine_technical_and_business(data, target_values1, target_values2):
|
||
|
extracted_data = {} # 根级别存储所有数据
|
||
|
technical_found = False
|
||
|
business_found = False
|
||
|
|
||
|
def extract_nested(data, parent_key='', is_technical=False, is_business=False):
|
||
|
nonlocal technical_found, business_found
|
||
|
if isinstance(data, dict):
|
||
|
for key, value in data.items():
|
||
|
current_key = f"{parent_key}.{key}" if parent_key else key
|
||
|
|
||
|
# 检查是否为技术标的内容
|
||
|
if any(target in key for target in target_values1):
|
||
|
if not is_technical:
|
||
|
# 直接存储在根级别
|
||
|
extracted_data[key] = value
|
||
|
technical_found = True
|
||
|
# 标记为技术标内容并停止进一步处理这个分支
|
||
|
continue
|
||
|
|
||
|
# 检查是否为商务标的内容
|
||
|
elif any(target in key for target in target_values2):
|
||
|
if not is_business:
|
||
|
# 存储在'商务标'分类下
|
||
|
if '商务标' not in extracted_data:
|
||
|
extracted_data['商务标'] = {}
|
||
|
extracted_data['商务标'][key] = value
|
||
|
business_found = True
|
||
|
# 标记为商务标内容并停止进一步处理这个分支
|
||
|
continue
|
||
|
|
||
|
# 如果当前值是字典或列表,且不在技术或商务分类下,继续递归搜索
|
||
|
if isinstance(value, dict) or isinstance(value, list):
|
||
|
extract_nested(value, current_key, is_technical, is_business)
|
||
|
|
||
|
elif isinstance(data, list):
|
||
|
for index, item in enumerate(data):
|
||
|
extract_nested(item, f"{parent_key}[{index}]", is_technical, is_business)
|
||
|
|
||
|
# 开始从顶级递归搜索
|
||
|
extract_nested(data)
|
||
|
|
||
|
# 处理未找到匹配的情况
|
||
|
if not technical_found:
|
||
|
extracted_data['技术标'] = ''
|
||
|
if not business_found:
|
||
|
extracted_data['商务标'] = ''
|
||
|
|
||
|
return extracted_data
|
||
|
target_values2=['投标报价','商务标','商务部分','报价部分','业绩','信誉','分值','计算公式','信用','人员','资格','奖项','认证','荣誉']
|
||
|
# update_json=combine_technical_and_business(clean_json_string(evaluation_res),target_values1,target_values2)
|