| from magic_pdf.libs.commons import fitz |
|
|
|
|
| def parse_tables(page_ID: int, page: fitz.Page, json_from_DocXchain_obj: dict): |
| """ |
| :param page_ID: int类型,当前page在当前pdf文档中是第page_D页。 |
| :param page :fitz读取的当前页的内容 |
| :param res_dir_path: str类型,是每一个pdf文档,在当前.py文件的目录下生成一个与pdf文档同名的文件夹,res_dir_path就是文件夹的dir |
| :param json_from_DocXchain_obj: dict类型,把pdf文档送入DocXChain模型中后,提取bbox,结果保存到pdf文档同名文件夹下的 page_ID.json文件中了。json_from_DocXchain_obj就是打开后的dict |
| """ |
| DPI = 72 |
| pix = page.get_pixmap(dpi=DPI) |
| pageL = 0 |
| pageR = int(pix.w) |
| pageU = 0 |
| pageD = int(pix.h) |
| |
|
|
| |
| table_bbox_from_DocXChain = [] |
|
|
| xf_json = json_from_DocXchain_obj |
| width_from_json = xf_json['page_info']['width'] |
| height_from_json = xf_json['page_info']['height'] |
| LR_scaleRatio = width_from_json / (pageR - pageL) |
| UD_scaleRatio = height_from_json / (pageD - pageU) |
|
|
| |
| for xf in xf_json['layout_dets']: |
| |
| |
| |
| L = xf['poly'][0] / LR_scaleRatio |
| U = xf['poly'][1] / UD_scaleRatio |
| R = xf['poly'][2] / LR_scaleRatio |
| D = xf['poly'][5] / UD_scaleRatio |
| |
| |
| |
| |
| L, R = min(L, R), max(L, R) |
| U, D = min(U, D), max(U, D) |
| if xf['category_id'] == 7 and xf['score'] >= 0.3: |
| table_bbox_from_DocXChain.append((L, U, R, D)) |
| |
| |
| table_final_names = [] |
| table_final_bboxs = [] |
| table_ID = 0 |
| for L, U, R, D in table_bbox_from_DocXChain: |
| |
| new_table_name = "table_{}_{}.png".format(page_ID, table_ID) |
| |
| table_final_names.append(new_table_name) |
| table_final_bboxs.append((L, U, R, D)) |
| table_ID += 1 |
| |
|
|
| table_final_bboxs.sort(key = lambda LURD: (LURD[1], LURD[0])) |
| curPage_all_table_bboxs = table_final_bboxs |
| return curPage_all_table_bboxs |
|
|
|
|