| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- # -*- coding: utf-8 -*-
- """遗留入库与批量处理脚本。
- 按 ARCHITECTURE.md Phase 4 要求,从 ``interface/Preprocessing.py`` 迁出。
- 类型:LEGACY(非运行时,仅用于历史数据迁移或调试)。
- 原位置:``interface/Preprocessing.py`` 中以下函数:
- - ``persistenceData`` — 将中间结果保存到数据库(线上不执行)
- - ``persistenceData1`` — 将实体/句子中间结果保存到数据库(线上不执行)
- - ``_handle`` — 批量表格解析的子任务处理函数
- - ``getPredictTable`` — 批量表格预测脚本入口
- ``interface/Preprocessing.py`` 仍 re-export 以上全部名称,老 import 不受影响。
- """
- from __future__ import absolute_import
- import json
- from bs4 import BeautifulSoup
- from BiddingKG.dl.preprocess.table_parser import tableToText
- __all__ = [
- "persistenceData",
- "persistenceData1",
- "_handle",
- "getPredictTable",
- ]
- def persistenceData(data):
- '''
- @summary:将中间结果保存到数据库-线上生产的时候不需要执行
- '''
- # Phase 1: PG 连接走 infra/db(原硬编码 host=192.168.2.101, password=postgres 已移除)
- from BiddingKG.dl.infra.db import get_connection
- conn = get_connection("BiddingKG")
- cursor = conn.cursor()
- for item_index in range(len(data)):
- item = data[item_index]
- doc_id = item[0]
- dic = item[1]
- code = dic['code']
- name = dic['name']
- prem = dic['prem']
- if len(code)==0:
- code_insert = ""
- else:
- code_insert = ";".join(code)
- prem_insert = ""
- for item in prem:
- for x in item:
- if isinstance(x, list):
- if len(x)>0:
- for x1 in x:
- prem_insert+="/".join(x1)+","
- prem_insert+="$"
- else:
- prem_insert+=str(x)+"$"
- prem_insert+=";"
- sql = " insert into predict_validation(doc_id,code,name,prem) values('"+doc_id+"','"+code_insert+"','"+name+"','"+prem_insert+"')"
- cursor.execute(sql)
- conn.commit()
- conn.close()
- def persistenceData1(list_entitys,list_sentences):
- '''
- @summary:将中间结果保存到数据库-线上生产的时候不需要执行
- '''
- # Phase 1: PG 连接走 infra/db
- from BiddingKG.dl.infra.db import get_connection
- conn = get_connection("BiddingKG")
- cursor = conn.cursor()
- for list_entity in list_entitys:
- for entity in list_entity:
- if entity.values is not None:
- sql = " insert into predict_entity(entity_id,entity_text,entity_type,doc_id,sentence_index,begin_index,end_index,label,values) values('"+str(entity.entity_id)+"','"+str(entity.entity_text)+"','"+str(entity.entity_type)+"','"+str(entity.doc_id)+"',"+str(entity.sentence_index)+","+str(entity.begin_index)+","+str(entity.end_index)+","+str(entity.label)+",array"+str(entity.values)+")"
- else:
- sql = " insert into predict_entity(entity_id,entity_text,entity_type,doc_id,sentence_index,begin_index,end_index) values('"+str(entity.entity_id)+"','"+str(entity.entity_text)+"','"+str(entity.entity_type)+"','"+str(entity.doc_id)+"',"+str(entity.sentence_index)+","+str(entity.begin_index)+","+str(entity.end_index)+")"
- cursor.execute(sql)
- for list_sentence in list_sentences:
- for sentence in list_sentence:
- str_tokens = "["
- for item in sentence.tokens:
- str_tokens += "'"
- if item=="'":
- str_tokens += "''"
- else:
- str_tokens += item
- str_tokens += "',"
- str_tokens = str_tokens[:-1]+"]"
- sql = " insert into predict_sentences(doc_id,sentence_index,tokens) values('"+sentence.doc_id+"',"+str(sentence.sentence_index)+",array"+str_tokens+")"
- cursor.execute(sql)
- conn.commit()
- conn.close()
- def _handle(item,result_queue):
- dochtml = item["dochtml"]
- docid = item["docid"]
- list_innerTable = tableToText(BeautifulSoup(dochtml,"lxml"))
- flag = False
- if list_innerTable:
- flag = True
- for table in list_innerTable:
- result_queue.put({"docid":docid,"json_table":json.dumps(table,ensure_ascii=False)})
- def getPredictTable():
- filename = "D:\Workspace2016\DataExport\data\websouce_doc.csv"
- import pandas as pd
- import json
- from BiddingKG.dl.common.MultiHandler import MultiHandler,Queue
- df = pd.read_csv(filename)
- df_data = {"json_table":[],"docid":[]}
- _count = 0
- _sum = len(df["docid"])
- task_queue = Queue()
- result_queue = Queue()
- _index = 0
- for dochtml,docid in zip(df["dochtmlcon"],df["docid"]):
- task_queue.put({"docid":docid,"dochtml":dochtml,"json_table":None})
- _index += 1
- mh = MultiHandler(task_queue=task_queue,task_handler=_handle,result_queue=result_queue,process_count=5,thread_count=1)
- mh.run()
- while True:
- try:
- item = result_queue.get(block=True,timeout=1)
- df_data["docid"].append(item["docid"])
- df_data["json_table"].append(item["json_table"])
- except Exception as e:
- print(e)
- break
- df_1 = pd.DataFrame(df_data)
- df_1.to_csv("../form/websource_67000_table.csv",columns=["docid","json_table"])
|