|
@@ -748,6 +748,8 @@ class PREMPredict():
|
|
|
values[label] = 0.49
|
|
|
elif label == 0 and re.search('最低限价', text):
|
|
|
values[label] = 0.49
|
|
|
+ elif re.search('金额在$', text):
|
|
|
+ values[label] = 0.49
|
|
|
entity.set_Money(label, values)
|
|
|
|
|
|
def correct_money_by_rule(self, title, list_entitys, list_articles):
|
|
@@ -2245,7 +2247,7 @@ class ProductAttributesPredictor():
|
|
|
continue
|
|
|
for td in tds:
|
|
|
td_text = re.sub('\s', '', td.get_text())
|
|
|
- td_text = td_text.replace("\x06", "").replace("\x05", "").replace("\x07", "").replace('\\', '/') # 修复272144312 # 产品单价数量提取结果有特殊符号\ 气动执行装置备件\密封组件\NBR+PT
|
|
|
+ td_text = td_text.replace("\x06", "").replace("\x05", "").replace("\x07", "").replace('\\', '/').replace('"', '') # 修复272144312 # 产品单价数量提取结果有特殊符号\ 气动执行装置备件\密封组件\NBR+PT
|
|
|
tr_line.append(td_text)
|
|
|
inner_table.append(tr_line)
|
|
|
return inner_table
|
|
@@ -2982,9 +2984,9 @@ class DocChannel():
|
|
|
'招标答疑': '现澄清(为|如下)|答疑补遗|澄清内容如下|第[0-9一二三四五]次澄清|答疑澄清|(最高(投标)?限价|控制价|拦标价)公示', # |异议的回复
|
|
|
'公告变更': '第[\d一二]次变更|(更正|变更)(公告|公示|信息|内容|事项|原因|理由|日期|时间|如下)|原公告((主要)?(信息|内容)|发布时间)|(变更|更正)[前后]内容|现?在?(变更|更正|修改|更改)(内容)?为|(公告|如下|信息|内容|事项|结果|文件|发布|时间|日期)(更正|变更)',
|
|
|
'公告变更neg': '履约变更内容',
|
|
|
- '候选人公示': '候选人公示|评标结果公示|中标候选人名单公示',
|
|
|
+ '候选人公示': '候选人公示|评标结果公示|中标候选人名单公示|现将中标候选人(进行公示|公[示布]如下)|(中标|中选)候选人(信息|情况)[::\s]',
|
|
|
'候选人公示neg': '中标候选人公示期',
|
|
|
- '中标信息': '供地结果信息|采用单源直接采购的?情况说明|[特现]?将\w{,4}(成交|中标|中选|选定结果|选取结果|入围结果|竞价结果)\w{,4}(进行公示|公[示布]如下)|(询价|竞价|遴选)(成交|中标|中选)(公告|公示)|(成交|中标|中选|选定|选取|入围|询价)结果(如下|公告|公示)|(中标|中选)(供应商|承包商|候选人|入围单位)如下|拟定供应商的情况|((中标|中选)(候选人|人|成交)|成交)\w{,3}(信息|情况)[::\s]',
|
|
|
+ '中标信息': '供地结果信息|采用单源直接采购的?情况说明|[特现]?将\w{,4}(成交|中标|中选|选定结果|选取结果|入围结果|竞价结果)\w{,4}(进行公示|公[示布]如下)|(询价|竞价|遴选)(成交|中标|中选)(公告|公示)|(成交|中标|中选|选定|选取|入围|询价)结果(如下|公告|公示)|(中标|中选)(供应商|承包商|候选人|入围单位)如下|拟定供应商的情况|((中标|中选)(人|成交)|成交)\w{,3}(信息|情况)[::\s]',
|
|
|
'中标信息2': '\s(成交|中标|中选)(信息|日期|时间|总?金额|价格)[::\s]|(采购|招标|成交|中标|中选|评标)结果|单一来源采购原因|拟采取单一来源方式采购|单一来源采购公示',
|
|
|
'中标信息3': '(中标|中选|成交|拟定|拟选用|最终选定的?|受让|唯一)(供应商|供货商|服务商|机构|企业|公司|单位|候选人|人)(名称)?[::\s]|[、\s](第一名|(拟定|推荐|入围)?(供应商|供货商)|(中选|中标|供货)单位|中选人)[::\s]',
|
|
|
'中标信息neg': '按项目控制价下浮\d%即为成交价|成交原则|不得确定为(中标|成交)|招标人按下列原则选择中标人|评选成交供应商:|拟邀请供应商|除单一来源采购项目外|单一来源除外|(各.{,5}|尊敬的)(供应商|供货商)[:\s]|竞拍起止时间:|询价结果[\s\n::]*不公开|本项目已具备招标条件|现对该项目进行招标公告|发布\w{2}结果后\d天内送达|本次\w{2}结果不对外公示|供应商\s*资格要求|成交情况:\s*[流废]标|中标单位:本次招标拟?中标单位\d家',
|
|
@@ -2992,7 +2994,7 @@ class DocChannel():
|
|
|
'合同公告': '合同(公告|公示|信息|内容)|合同(编号|名称|主体|基本情况|完成(日期|时间))|(供应商乙方|乙方供应商):|合同总?金额|履约信息',
|
|
|
'废标公告': '(终止|中止|废标|流标|失败|作废|异常|撤销)(结果)?(公告|公示|招标|采购|竞价)|(谈判结果为|结果类型):?废标|((本|该)(项目|标段|合同|合同包|采购包|次)\w{,5})((失败|终止|流标|废标)|予以废标|(按|做|作)?(流标|废标|废置)处理)|(采购|招标|询价|议价|竞价|比价|比选|遴选|邀请|邀标|磋商|洽谈|约谈|谈判|竞谈|应答|项目)(终止|中止|废标|流标|失败|作废|异常|撤销)',
|
|
|
'废标公告2': '(无效|中止|终止|废标|流标|失败|作废|异常|撤销)的?(原因|理由)|本项目因故取消|本(项目|次)(公开)?\w{2}失败|已终止\s*原因:|(人|人数|供应商|单位)(不足|未达\w{,3}数量)|已终止|不足[3三]家|无(废标)|成交情况:\s*[流废]标|现予以废置',
|
|
|
- '废标公告neg': '超过此报价将作为[废流]标处理|否则按[废流]标处理|终止规则:|成交规则:|视为流标'
|
|
|
+ '废标公告neg': '超过此报价将作为[废流]标处理|否则按[废流]标处理|终止规则:|成交规则:|视为流标|竞价失败的一切其他情形'
|
|
|
}
|
|
|
self.title_life_dic = {
|
|
|
'采购意向': '采购意向|招标意向|选取意向|意向公告|意向公示|意向公开',
|
|
@@ -3370,7 +3372,9 @@ class DocChannel():
|
|
|
if '采购意向' in life_kw_title or '采购意向' in life_list:
|
|
|
return '采购意向', msc
|
|
|
elif '招标预告' in life_kw_title or '招标预告' in life_list:
|
|
|
- if set(['中标信息', '候选人公示', '合同公告']) & set(life_kw_content) != set():
|
|
|
+ if '中标信息' in life_kw_title:
|
|
|
+ return '中标信息', msc
|
|
|
+ elif set(['候选人公示', '合同公告']) & set(life_kw_title) != set():
|
|
|
return '', msc
|
|
|
return '招标预告', msc
|
|
|
elif '公告变更' in life_kw_title or '公告变更' in life_list:
|
|
@@ -3578,7 +3582,7 @@ class DocChannel():
|
|
|
if web_source_no in ['02104-7', '04733', 'DX007628-6']: # 这些数据源无法识别
|
|
|
return {'docchannel': {'docchannel': '', 'doctype': '采招数据', 'life_docchannel': origin_dic.get(original_docchannel, '原始类别')}}, '此数据源公告分类不明确,返回数据源类别'
|
|
|
|
|
|
- title = re.sub('[^\u4e00-\u9fa5]', '', title)
|
|
|
+ title = re.sub('[^\u4e00-\u9fa5]+|出租车', '', title)
|
|
|
if len(title) > 50:
|
|
|
title = title[:20] + title[-30:]
|
|
|
|
|
@@ -4335,9 +4339,33 @@ class DistrictPredictor():
|
|
|
# print(area_dic)
|
|
|
return {'district': area_dic}
|
|
|
|
|
|
- tenderee, tenderee_address = get_ree_addr(prem)
|
|
|
- project_name = str(project_name)
|
|
|
- tenderee = str(tenderee)
|
|
|
+ def get_role_address(text):
|
|
|
+ '''正则匹配获取招标人地址
|
|
|
+ 3:地址直接在招标人后面 招标人:xxx,地址:xxx
|
|
|
+ 4:招标、代理一起,两个地址一起 招标人:xxx, 代理人:xxx, 地址:xxx, 地址:xxx.
|
|
|
+ '''
|
|
|
+ p3 = '(招标|采购)(人|单位)(信息:)?(名称)?:[\w()]{4,15},(联系)?地址:(?P<addr>(\w{2,8}[省市州区县][^\w]*)+)'
|
|
|
+ p4 = '(招标|采购)(人|单位)(名称)?:[\w()]{4,15},(招标|采购)?代理(人|机构)(名称)?:[\w()]{4,15},(联系)?地址:(?P<addr>(\w{2,8}[省市州区县][^\w]*)+)'
|
|
|
+ if re.search(p3, text):
|
|
|
+ return re.search(p3, text).group('addr')
|
|
|
+ elif re.search(p4, text):
|
|
|
+ return re.search(p4, text).group('addr')
|
|
|
+ else:
|
|
|
+ return ''
|
|
|
+
|
|
|
+ def get_project_addr(text):
|
|
|
+ p1 = '(项目|建设|工程|服务|交货|送货|收货|)(地址|地点|位置|所在地区?):(\w{2,8}[省市州区县][^\w]*)+'
|
|
|
+ if re.search(p1, text):
|
|
|
+ return re.search(p1, text).group(0)
|
|
|
+ else:
|
|
|
+ return ''
|
|
|
+
|
|
|
+ def get_bid_addr(text):
|
|
|
+ p2 = '(磋商|谈判|开标|投标|评标|(采购|招标)(人|单位)|报名|递交|评审|发售)(地址|地点|所在地区?):(\w{2,8}[省市州区县][^\w]*)+'
|
|
|
+ if re.search(p2, text):
|
|
|
+ return re.search(p2, text).group(0)
|
|
|
+ else:
|
|
|
+ return ''
|
|
|
|
|
|
if '##attachment##' in list_articles[0].content:
|
|
|
content, attachment = list_articles[0].content.split('##attachment##')
|
|
@@ -4346,12 +4374,30 @@ class DistrictPredictor():
|
|
|
else:
|
|
|
content = list_articles[0].content
|
|
|
|
|
|
+ tenderee, tenderee_address = get_ree_addr(prem)
|
|
|
+ pro_addr = get_project_addr(content)
|
|
|
+ if pro_addr != "":
|
|
|
+ tenderee_address = pro_addr
|
|
|
+ else:
|
|
|
+ role_addr = get_role_address(content)
|
|
|
+ if role_addr != "":
|
|
|
+ tenderee_address = role_addr
|
|
|
+
|
|
|
+ if tenderee_address == "":
|
|
|
+ bid_addr = get_bid_addr(content)
|
|
|
+ if bid_addr != "":
|
|
|
+ tenderee_address = bid_addr
|
|
|
+
|
|
|
+ project_name = str(project_name)
|
|
|
+ tenderee = str(tenderee)
|
|
|
+
|
|
|
+ # print('招标人地址',role_addr, tenderee_address)
|
|
|
+
|
|
|
project_name = project_name + title if project_name not in title else project_name
|
|
|
project_name = project_name.replace(tenderee, '')
|
|
|
+
|
|
|
text1 = "{0} {1} {2}".format(project_name, tenderee, tenderee_address)
|
|
|
- ser = re.search('项目所在地区?:(\w{2,8}[省市区县])+', content)
|
|
|
- if ser:
|
|
|
- text1 = ser.group(0)
|
|
|
+ # print('text1:', text1)
|
|
|
|
|
|
web_source_name = str(web_source_name) # 修复某些不是字符串类型造成报错
|
|
|
text1 = re.sub('复合肥|铁路|公路|新会计', ' ', text1) #预防提取错 合肥 路南 新会 等地区
|