[表格重构]Complicated Table Structure Recognition

正午 2020-03-31 PM 468℃ 0条

论文Complicated Table Structure Recognition 尝试用图的方法重构表格的结构。 文章代码
截屏2020-03-31下午6.03.27.png

文章想解决的问题如上图,在表格重构的时候文本块是属于同一行还是下一行肉眼很清楚,但是机器一般很难做到,存在单元格合并的问题。文章的整个做法如下图:

截屏2020-03-31下午6.05.55.png

从 PDF 中提取文本 chunk 的坐标和内容, 然后根据 chunk 之间的关心构造一个图,模型输入是顶点和边的特征,以及图的关系,预测边的类型,边的类型分为三种,上面蓝色的线表示 chunk 是同行的,红色的线表示是下一行的,另外一种就是没关系。

顶点的特征如下:

 return {
      "x1": self.chunk.x1,
      "x2": self.chunk.x2,
      "y1": self.chunk.y1,
      "y2": self.chunk.y2,
      "x center": (self.chunk.x1 + self.chunk.x2) / 2,
      "y center": (self.chunk.y1 + self.chunk.y2) / 2,
      "relative x1": self.chunk.x1 / self.tab_w,
      "relative x2": self.chunk.x2 / self.tab_w,
      "relative y1": self.chunk.y1 / self.tab_h,
      "relative y2": self.chunk.y2  / self.tab_h,
      "relative x center": (self.chunk.x1 + self.chunk.x2) / 2 / self.tab_w,
      "relative y center": (self.chunk.y2 + self.chunk.y2) / 2 / self.tab_h,
      "height of chunk": self.chunk.y2 - self.chunk.y1,
      "width of chunk": self.chunk.x2 - self.chunk.x1
    }

边的特征:

return {
      "x distance": x_dis,
      "y distance": y_dis,
      "relative (table) x distance": x_dis / tab_w,
      "relative (table) y distance": y_dis / tab_h,
      "relative (chunk) x distance": x_dis / c_w,
      "relative (chunk) y distance": y_dis / c_h,
      "x coincide": x_cncd,
      "y coincide": y_cncd,
      "relative (table) x coincide": x_cncd / tab_w,
      "relative (table) y coincide": y_cncd / tab_h,
      "relative (chunk) x coincide": x_cncd / c_w,
      "relative (chunk) y coincide": y_cncd / c_h,
      "Euler distance": math.sqrt(x_dis**2 + y_dis**2),
      "relative (table) Euler distance": math.sqrt((x_dis / tab_w)**2 + (y_dis / tab_h)**2),
      "relative (chunk) Euler distance": math.sqrt((x_dis / c_w)**2 + (y_dis / c_h)**2),
      "center x distance": c_x_dis,
      "relative (table) center x distance": c_x_dis / tab_w,
      "relative (chunk) center x distance": c_x_dis / c_w,
      "center y distance": c_y_dis,
      "relative (table) center y distance": c_y_dis / tab_h,
      "relative (chunk) center y distance": c_y_dis / c_h,
      "center Euler distance": math.sqrt(c_x_dis**2 + c_y_dis**2),
      "relative (table) center Euler distance": math.sqrt((c_x_dis / tab_w)**2 + (c_y_dis / tab_h)**2),
      "relative (chunk) center Euler distance": math.sqrt((c_x_dis / c_w)**2 + (c_y_dis / c_h)**2),
    }

本质上就是利用距离位置的信息来判断文本块之间的关系。

文章中的问题太简单,真实场景多会比这个复杂。但是文章的思想我想可以用到很多地方,如果能加入图像或者是文本信息才是最好的。比如加入文本信息,可以从 HTML 结构中抽取数据,加入图片信息和文本信息可以端到端的从 pdf 图片中抽取信息

2020/04/07
还真的有人做了, 分别实现了添加文本信息, 添加图像信息 https://github.com/Irene323/GFTE

标签: none

非特殊说明,本博所有文章均为博主原创。

评论