|
@@ -350,8 +350,8 @@ class Dataflow():
|
|
|
|
|
|
|
|
|
|
def generate_dumplicate_query(self,_dict,_dict_must_not,set_match=set(["project_code","project_codes","product"]),set_nested=set(["win_tenderer","bidding_budget","win_bid_price"]),
|
|
def generate_dumplicate_query(self,_dict,_dict_must_not,set_match=set(["project_code","project_codes","product"]),set_nested=set(["win_tenderer","bidding_budget","win_bid_price"]),
|
|
- set_term=set(["project_name","doctitle_refine","docchannel","tenderee","agency","web_source_no","fingerprint","save","docid"]),
|
|
|
|
- set_range=set(["page_time","status"]),set_phrase=set(["doctitle"])):
|
|
|
|
|
|
+ set_term=set(["doctitle_refine","docchannel","tenderee","agency","web_source_no","fingerprint","save","docid"]),
|
|
|
|
+ set_range=set(["page_time","status"]),set_phrase=set(["doctitle","project_name"])):
|
|
list_must_queries = []
|
|
list_must_queries = []
|
|
list_must_no_queries = []
|
|
list_must_no_queries = []
|
|
for k,v in _dict.items():
|
|
for k,v in _dict.items():
|
|
@@ -2235,6 +2235,8 @@ class Dataflow_dumplicate(Dataflow):
|
|
_dict["package"] = self.c_f_get_package.evaluate(extract_json)
|
|
_dict["package"] = self.c_f_get_package.evaluate(extract_json)
|
|
_dict["project_name"] = _extract.get("name","")
|
|
_dict["project_name"] = _extract.get("name","")
|
|
_dict["dict_time"] = self.get_dict_time(_extract)
|
|
_dict["dict_time"] = self.get_dict_time(_extract)
|
|
|
|
+ _dict["punish"] = _extract.get("punish",{})
|
|
|
|
+ _dict["approval"] = _extract.get("approval",[])
|
|
|
|
|
|
def dumplicate_fianl_check(self,base_list,b_log=False):
|
|
def dumplicate_fianl_check(self,base_list,b_log=False):
|
|
the_group = base_list
|
|
the_group = base_list
|
|
@@ -2295,6 +2297,9 @@ class Dataflow_dumplicate(Dataflow):
|
|
moneys_less = document_less.get("moneys")
|
|
moneys_less = document_less.get("moneys")
|
|
moneys_attachment_less = document_less.get("moneys_attachment")
|
|
moneys_attachment_less = document_less.get("moneys_attachment")
|
|
page_attachments_less = document_less.get(document_tmp_attachment_path,"[]")
|
|
page_attachments_less = document_less.get(document_tmp_attachment_path,"[]")
|
|
|
|
+ punish_less = document_less.get("punish",{})
|
|
|
|
+ approval_less = document_less.get("approval",[])
|
|
|
|
+ source_type_less = document_less.get("source_type")
|
|
|
|
|
|
|
|
|
|
document_greater = _dict2
|
|
document_greater = _dict2
|
|
@@ -2324,12 +2329,16 @@ class Dataflow_dumplicate(Dataflow):
|
|
moneys_attachment_greater = document_greater.get("moneys_attachment")
|
|
moneys_attachment_greater = document_greater.get("moneys_attachment")
|
|
page_attachments_greater = document_greater.get(document_tmp_attachment_path,"[]")
|
|
page_attachments_greater = document_greater.get(document_tmp_attachment_path,"[]")
|
|
|
|
|
|
|
|
+ punish_greater = document_greater.get("punish",{})
|
|
|
|
+ approval_greater = document_greater.get("approval",[])
|
|
|
|
+ source_type_greater = document_greater.get("source_type")
|
|
|
|
+
|
|
hard_level=1
|
|
hard_level=1
|
|
if web_source_no_less==web_source_no_greater=="17397-3":
|
|
if web_source_no_less==web_source_no_greater=="17397-3":
|
|
hard_level=2
|
|
hard_level=2
|
|
|
|
|
|
if self.check_rule==1:
|
|
if self.check_rule==1:
|
|
- _prob = check_dumplicate_rule(docid_less,docid_greater,fingerprint_less,fingerprint_greater,project_codes_less,project_codes_greater,tenderee_less,tenderee_greater,agency_less,agency_greater,win_tenderer_less,win_tenderer_greater,bidding_budget_less,bidding_budget_greater,win_bid_price_less,win_bid_price_greater,project_name_less,project_name_greater,doctitle_refine_less,doctitle_refine_greater,extract_count_less,extract_count_greater,docchannel_less,docchannel_greater,page_time_less,page_time_greater,product_less,product_greater,nlp_enterprise_less,nlp_enterprise_greater,package_less,package_greater,json_time_less,json_time_greater,province_less,province_greater,city_less,city_greater,district_less,district_greater,min_counts,b_log=b_log,hard_level=hard_level,web_source_no_less=web_source_no_less,web_source_no_greater=web_source_no_greater,moneys_less=moneys_less,moneys_greater=moneys_greater,moneys_attachment_less=moneys_attachment_less,moneys_attachment_greater=moneys_attachment_greater,page_attachments_less=page_attachments_less,page_attachments_greater=page_attachments_greater)
|
|
|
|
|
|
+ _prob = check_dumplicate_rule(docid_less,docid_greater,fingerprint_less,fingerprint_greater,project_codes_less,project_codes_greater,tenderee_less,tenderee_greater,agency_less,agency_greater,win_tenderer_less,win_tenderer_greater,bidding_budget_less,bidding_budget_greater,win_bid_price_less,win_bid_price_greater,project_name_less,project_name_greater,doctitle_refine_less,doctitle_refine_greater,extract_count_less,extract_count_greater,docchannel_less,docchannel_greater,page_time_less,page_time_greater,product_less,product_greater,nlp_enterprise_less,nlp_enterprise_greater,package_less,package_greater,json_time_less,json_time_greater,province_less,province_greater,city_less,city_greater,district_less,district_greater,min_counts,b_log=b_log,hard_level=hard_level,web_source_no_less=web_source_no_less,web_source_no_greater=web_source_no_greater,moneys_less=moneys_less,moneys_greater=moneys_greater,moneys_attachment_less=moneys_attachment_less,moneys_attachment_greater=moneys_attachment_greater,page_attachments_less=page_attachments_less,page_attachments_greater=page_attachments_greater,punish_less=punish_less,punish_greater=punish_greater,approval_less=approval_less,approval_greater=approval_greater,source_type_less=source_type_less,source_type_greater=source_type_greater)
|
|
else:
|
|
else:
|
|
_prob = check_dumplicate_rule_test(docid_less,docid_greater,fingerprint_less,fingerprint_greater,project_codes_less,project_codes_greater,tenderee_less,tenderee_greater,agency_less,agency_greater,win_tenderer_less,win_tenderer_greater,bidding_budget_less,bidding_budget_greater,win_bid_price_less,win_bid_price_greater,project_name_less,project_name_greater,doctitle_refine_less,doctitle_refine_greater,extract_count_less,extract_count_greater,docchannel_less,docchannel_greater,page_time_less,page_time_greater,product_less,product_greater,nlp_enterprise_less,nlp_enterprise_greater,package_less,package_greater,json_time_less,json_time_greater,province_less,province_greater,city_less,city_greater,district_less,district_greater,min_counts,b_log=b_log,hard_level=hard_level,web_source_no_less=web_source_no_less,web_source_no_greater=web_source_no_greater)
|
|
_prob = check_dumplicate_rule_test(docid_less,docid_greater,fingerprint_less,fingerprint_greater,project_codes_less,project_codes_greater,tenderee_less,tenderee_greater,agency_less,agency_greater,win_tenderer_less,win_tenderer_greater,bidding_budget_less,bidding_budget_greater,win_bid_price_less,win_bid_price_greater,project_name_less,project_name_greater,doctitle_refine_less,doctitle_refine_greater,extract_count_less,extract_count_greater,docchannel_less,docchannel_greater,page_time_less,page_time_greater,product_less,product_greater,nlp_enterprise_less,nlp_enterprise_greater,package_less,package_greater,json_time_less,json_time_greater,province_less,province_greater,city_less,city_greater,district_less,district_greater,min_counts,b_log=b_log,hard_level=hard_level,web_source_no_less=web_source_no_less,web_source_no_greater=web_source_no_greater)
|
|
|
|
|
|
@@ -2854,7 +2863,7 @@ class Dataflow_dumplicate(Dataflow):
|
|
|
|
|
|
return list_rules,table_name,table_index
|
|
return list_rules,table_name,table_index
|
|
|
|
|
|
- def producer_flow_dumplicate(self,process_count,status_from,columns=[document_tmp_status,document_tmp_save,document_tmp_page_time,document_tmp_docchannel,document_tmp_tenderee,document_tmp_agency,document_tmp_doctitle,document_tmp_sub_docs_json,document_tmp_extract_json,document_attachment_extract_status,document_update_document,document_province,document_city,document_district,document_tmp_attachment_path,document_tmp_web_source_name]):
|
|
|
|
|
|
+ def producer_flow_dumplicate(self,process_count,status_from,columns=[document_tmp_status,document_tmp_save,document_tmp_page_time,document_tmp_docchannel,document_tmp_tenderee,document_tmp_agency,document_tmp_doctitle,document_tmp_sub_docs_json,document_tmp_extract_json,document_attachment_extract_status,document_update_document,document_province,document_city,document_district,document_tmp_attachment_path,document_tmp_web_source_no,document_tmp_web_source_name,document_tmp_source_stage,document_tmp_source_type]):
|
|
q_size = self.queue_dumplicate.qsize()
|
|
q_size = self.queue_dumplicate.qsize()
|
|
log("dumplicate queue size %d"%(q_size))
|
|
log("dumplicate queue size %d"%(q_size))
|
|
|
|
|
|
@@ -2939,7 +2948,7 @@ class Dataflow_dumplicate(Dataflow):
|
|
# mt.run()
|
|
# mt.run()
|
|
|
|
|
|
|
|
|
|
- def search_docs(self,list_docids,columns_to_get = [document_doctitle,document_tmp_save,document_bidway,document_status,document_page_time,document_info_source,document_fingerprint,document_docchannel,document_life_docchannel,document_area,document_province,document_city,document_district,document_tmp_sub_docs_json,document_industry,document_info_type,document_qcodes,document_project_name,document_project_code,document_tenderee,document_tenderee_addr,document_tenderee_phone,document_tenderee_contact,document_agency,document_agency_phone,document_agency_contact,project_procurement_system,document_project_codes,document_product,document_moneysource,document_time_bidclose,document_time_bidopen,document_time_bidstart,document_time_commencement,document_time_completion,document_time_earnest_money_start,document_time_earnest_money_end,document_time_get_file_end,document_time_get_file_start,document_time_publicity_end,document_time_publicity_start,document_time_registration_end,document_time_registration_start,document_time_release,document_tmp_extract_count,document_nlp_enterprise,document_nlp_enterprise_attachment]):
|
|
|
|
|
|
+ def search_docs(self,list_docids,columns_to_get = [document_doctitle,document_tmp_save,document_bidway,document_status,document_page_time,document_info_source,document_fingerprint,document_docchannel,document_life_docchannel,document_area,document_province,document_city,document_district,document_tmp_sub_docs_json,document_industry,document_info_type,document_qcodes,document_project_name,document_project_code,document_tenderee,document_tenderee_addr,document_tenderee_phone,document_tenderee_contact,document_agency,document_agency_phone,document_agency_contact,project_procurement_system,document_project_codes,document_product,document_moneysource,document_time_bidclose,document_time_bidopen,document_time_bidstart,document_time_commencement,document_time_completion,document_time_earnest_money_start,document_time_earnest_money_end,document_time_get_file_end,document_time_get_file_start,document_time_publicity_end,document_time_publicity_start,document_time_registration_end,document_time_registration_start,document_time_release,document_tmp_extract_count,document_nlp_enterprise,document_nlp_enterprise_attachment,document_tenderee_code,document_agency_code,document_candidates]):
|
|
'''
|
|
'''
|
|
根据docid查询公告内容,先查询document_tmp,再查询document
|
|
根据docid查询公告内容,先查询document_tmp,再查询document
|
|
:param list_docids:
|
|
:param list_docids:
|
|
@@ -3049,7 +3058,7 @@ class Dataflow_dumplicate(Dataflow):
|
|
continue
|
|
continue
|
|
if v is None or v=="" or v=="[]" or v=="未知":
|
|
if v is None or v=="" or v=="[]" or v=="未知":
|
|
continue
|
|
continue
|
|
- if k in (project_project_dynamics,project_product,project_project_codes,project_docids):
|
|
|
|
|
|
+ if k in (project_project_dynamics,project_product,project_project_codes,project_docids,project_candidates):
|
|
continue
|
|
continue
|
|
_dict[k] = v
|
|
_dict[k] = v
|
|
for _proj in projects:
|
|
for _proj in projects:
|
|
@@ -3058,14 +3067,19 @@ class Dataflow_dumplicate(Dataflow):
|
|
if _proj.get(project_page_time,"")<project_dict.get(project_page_time,""):
|
|
if _proj.get(project_page_time,"")<project_dict.get(project_page_time,""):
|
|
_proj[project_page_time] = project_dict.get(project_page_time,"")
|
|
_proj[project_page_time] = project_dict.get(project_page_time,"")
|
|
|
|
|
|
- #拼接属性
|
|
|
|
- append_dict = {}
|
|
|
|
- set_docid = set()
|
|
|
|
- set_product = set()
|
|
|
|
- set_code = set()
|
|
|
|
- set_nlp_enterprise = set()
|
|
|
|
- set_nlp_enterprise_attachment = set()
|
|
|
|
|
|
+
|
|
for _proj in projects:
|
|
for _proj in projects:
|
|
|
|
+ #拼接属性
|
|
|
|
+ append_dict = {}
|
|
|
|
+ set_docid = set()
|
|
|
|
+ set_product = set()
|
|
|
|
+ set_code = set()
|
|
|
|
+ set_nlp_enterprise = set()
|
|
|
|
+ set_nlp_enterprise_attachment = set()
|
|
|
|
+ set_candidates = set()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
_docids = _proj.get(project_docids,"")
|
|
_docids = _proj.get(project_docids,"")
|
|
_codes = _proj.get(project_project_codes,"")
|
|
_codes = _proj.get(project_project_codes,"")
|
|
_product = _proj.get(project_product,"")
|
|
_product = _proj.get(project_product,"")
|
|
@@ -3081,15 +3095,22 @@ class Dataflow_dumplicate(Dataflow):
|
|
try:
|
|
try:
|
|
set_nlp_enterprise |= set(json.loads(_proj.get(project_nlp_enterprise,"[]")))
|
|
set_nlp_enterprise |= set(json.loads(_proj.get(project_nlp_enterprise,"[]")))
|
|
set_nlp_enterprise_attachment |= set(json.loads(_proj.get(project_nlp_enterprise_attachment,"[]")))
|
|
set_nlp_enterprise_attachment |= set(json.loads(_proj.get(project_nlp_enterprise_attachment,"[]")))
|
|
- except Exception as e:
|
|
|
|
- pass
|
|
|
|
|
|
+ list_candidates = json.loads(project_dict.get(project_candidates,"[]"))
|
|
|
|
+ for item in list_candidates:
|
|
|
|
+ if item.get("name") is not None and item.get("name") not in set_candidates:
|
|
|
|
+ set_candidates.add(item.get("name"))
|
|
|
|
|
|
- set_code = set_code | set(project_dict.get(project_project_codes,"").split(","))
|
|
|
|
- set_product = set_product | set(project_dict.get(project_product,"").split(","))
|
|
|
|
|
|
|
|
- try:
|
|
|
|
|
|
+ set_code = set_code | set(project_dict.get(project_project_codes,"").split(","))
|
|
|
|
+ set_product = set_product | set(project_dict.get(project_product,"").split(","))
|
|
|
|
+
|
|
set_nlp_enterprise |= set(json.loads(project_dict.get(project_nlp_enterprise,"[]")))
|
|
set_nlp_enterprise |= set(json.loads(project_dict.get(project_nlp_enterprise,"[]")))
|
|
set_nlp_enterprise_attachment |= set(json.loads(project_dict.get(project_nlp_enterprise_attachment,"[]")))
|
|
set_nlp_enterprise_attachment |= set(json.loads(project_dict.get(project_nlp_enterprise_attachment,"[]")))
|
|
|
|
+
|
|
|
|
+ for item in json.loads(_proj.get(project_candidates,"[]")):
|
|
|
|
+ if item.get("name") is not None and item.get("name") not in set_candidates:
|
|
|
|
+ set_candidates.add(item.get("name"))
|
|
|
|
+ list_candidates.append(item)
|
|
except Exception as e:
|
|
except Exception as e:
|
|
pass
|
|
pass
|
|
|
|
|
|
@@ -3101,6 +3122,7 @@ class Dataflow_dumplicate(Dataflow):
|
|
|
|
|
|
append_dict[project_nlp_enterprise] = json.dumps(list(set_nlp_enterprise)[:100],ensure_ascii=False)
|
|
append_dict[project_nlp_enterprise] = json.dumps(list(set_nlp_enterprise)[:100],ensure_ascii=False)
|
|
append_dict[project_nlp_enterprise_attachment] = json.dumps(list(set_nlp_enterprise_attachment)[:100],ensure_ascii=False)
|
|
append_dict[project_nlp_enterprise_attachment] = json.dumps(list(set_nlp_enterprise_attachment)[:100],ensure_ascii=False)
|
|
|
|
+ append_dict[project_candidates] = json.dumps(list_candidates,ensure_ascii=False)
|
|
|
|
|
|
|
|
|
|
dict_dynamic = {}
|
|
dict_dynamic = {}
|
|
@@ -3119,6 +3141,7 @@ class Dataflow_dumplicate(Dataflow):
|
|
list_dynamics.sort(key=lambda x:x.get(document_page_time,""))
|
|
list_dynamics.sort(key=lambda x:x.get(document_page_time,""))
|
|
|
|
|
|
append_dict[project_project_dynamics] = json.dumps(list_dynamics[:100],ensure_ascii=False)
|
|
append_dict[project_project_dynamics] = json.dumps(list_dynamics[:100],ensure_ascii=False)
|
|
|
|
+
|
|
_proj.update(append_dict)
|
|
_proj.update(append_dict)
|
|
|
|
|
|
|
|
|
|
@@ -3539,6 +3562,9 @@ class Dataflow_dumplicate(Dataflow):
|
|
project_info_source,
|
|
project_info_source,
|
|
project_nlp_enterprise,
|
|
project_nlp_enterprise,
|
|
project_nlp_enterprise_attachment,
|
|
project_nlp_enterprise_attachment,
|
|
|
|
+ project_tenderee_code,
|
|
|
|
+ project_agency_code,
|
|
|
|
+ project_candidates
|
|
],sort="page_time",table_name="project2",table_index="project2_index")
|
|
],sort="page_time",table_name="project2",table_index="project2_index")
|
|
|
|
|
|
return list_project_dict
|
|
return list_project_dict
|
|
@@ -4024,7 +4050,7 @@ class Dataflow_dumplicate(Dataflow):
|
|
singleNum_keys = _rule["singleNum_keys"]
|
|
singleNum_keys = _rule["singleNum_keys"]
|
|
contain_keys = _rule["contain_keys"]
|
|
contain_keys = _rule["contain_keys"]
|
|
multiNum_keys = _rule["multiNum_keys"]
|
|
multiNum_keys = _rule["multiNum_keys"]
|
|
- self.add_data_by_query(item,base_list,set_docid,_query,confidence,table_name=table_name,table_index=table_index,singleNum_keys=singleNum_keys,contain_keys=contain_keys,multiNum_keys=multiNum_keys,columns=[document_tmp_status,document_tmp_save,document_tmp_page_time,document_tmp_docchannel,document_tmp_tenderee,document_tmp_agency,document_tmp_doctitle_refine,document_tmp_sub_docs_json,document_tmp_extract_json,document_tmp_web_source_no,document_tmp_fingerprint,document_attachment_extract_status,document_province,document_city,document_district,document_doctitle,document_tmp_attachment_path],b_log=b_log)
|
|
|
|
|
|
+ self.add_data_by_query(item,base_list,set_docid,_query,confidence,table_name=table_name,table_index=table_index,singleNum_keys=singleNum_keys,contain_keys=contain_keys,multiNum_keys=multiNum_keys,columns=[document_tmp_status,document_tmp_save,document_tmp_page_time,document_tmp_docchannel,document_tmp_tenderee,document_tmp_agency,document_tmp_doctitle_refine,document_tmp_sub_docs_json,document_tmp_extract_json,document_tmp_web_source_no,document_tmp_fingerprint,document_attachment_extract_status,document_province,document_city,document_district,document_doctitle,document_tmp_attachment_path,document_tmp_source_stage,document_tmp_source_type],b_log=b_log)
|
|
_i += step
|
|
_i += step
|
|
|
|
|
|
|
|
|
|
@@ -4087,7 +4113,8 @@ class Dataflow_dumplicate(Dataflow):
|
|
|
|
|
|
list_merge_dump = []
|
|
list_merge_dump = []
|
|
if (exist_finterprint and dtmp.getProperties().get(document_tmp_save)==0) or item.get(document_docchannel,0) in (301,302):
|
|
if (exist_finterprint and dtmp.getProperties().get(document_tmp_save)==0) or item.get(document_docchannel,0) in (301,302):
|
|
- log("exist_finterprint %s"%(str(item.get(document_tmp_docid))))
|
|
|
|
|
|
+ if exist_finterprint:
|
|
|
|
+ log("exist_finterprint %s"%(str(item.get(document_tmp_docid))))
|
|
dtmp.setValue(document_tmp_projects,"[]",True)
|
|
dtmp.setValue(document_tmp_projects,"[]",True)
|
|
else:
|
|
else:
|
|
project_json,list_merge_dump = self.merge_document_real(item,list_docids,table_name,dtmp.getProperties().get(document_tmp_save),flow_dumplicate_status_to,b_log)
|
|
project_json,list_merge_dump = self.merge_document_real(item,list_docids,table_name,dtmp.getProperties().get(document_tmp_save),flow_dumplicate_status_to,b_log)
|
|
@@ -4222,7 +4249,7 @@ class Dataflow_dumplicate(Dataflow):
|
|
|
|
|
|
def test_dumplicate(self,docid):
|
|
def test_dumplicate(self,docid):
|
|
# columns=[document_tmp_status,document_tmp_page_time,document_tmp_docchannel,document_tmp_tenderee,document_tmp_agency,document_tmp_doctitle,document_tmp_sub_docs_json,document_tmp_extract_json,document_tmp_web_source_no,document_tmp_fingerprint,document_attachment_extract_status]
|
|
# columns=[document_tmp_status,document_tmp_page_time,document_tmp_docchannel,document_tmp_tenderee,document_tmp_agency,document_tmp_doctitle,document_tmp_sub_docs_json,document_tmp_extract_json,document_tmp_web_source_no,document_tmp_fingerprint,document_attachment_extract_status]
|
|
- columns=[document_tmp_status,document_tmp_save,document_tmp_page_time,document_tmp_docchannel,document_tmp_tenderee,document_tmp_agency,document_tmp_doctitle,document_tmp_sub_docs_json,document_tmp_extract_json,document_attachment_extract_status,document_update_document,document_province,document_city,document_district,document_tmp_attachment_path,document_tmp_web_source_name]
|
|
|
|
|
|
+ columns=[document_tmp_status,document_tmp_save,document_tmp_page_time,document_tmp_docchannel,document_tmp_tenderee,document_tmp_agency,document_tmp_doctitle,document_tmp_sub_docs_json,document_tmp_extract_json,document_attachment_extract_status,document_update_document,document_province,document_city,document_district,document_tmp_attachment_path,document_tmp_web_source_no,document_tmp_web_source_name,document_tmp_source_stage,document_tmp_source_type]
|
|
bool_query = BoolQuery(must_queries=[
|
|
bool_query = BoolQuery(must_queries=[
|
|
TermQuery("docid",docid)
|
|
TermQuery("docid",docid)
|
|
])
|
|
])
|
|
@@ -4413,7 +4440,7 @@ if __name__ == '__main__':
|
|
# test_attachment_interface()
|
|
# test_attachment_interface()
|
|
df_dump = Dataflow_dumplicate(start_delete_listener=False)
|
|
df_dump = Dataflow_dumplicate(start_delete_listener=False)
|
|
# df_dump.start_flow_dumplicate()
|
|
# df_dump.start_flow_dumplicate()
|
|
- df_dump.test_dumplicate(497234586
|
|
|
|
|
|
+ df_dump.test_dumplicate(505243916
|
|
)
|
|
)
|
|
# compare_dumplicate_check()
|
|
# compare_dumplicate_check()
|
|
# df_dump.test_merge([391898061
|
|
# df_dump.test_merge([391898061
|