SciTSR数据集简介

介绍

SciTSR是一个大型的表格结构识别数据集,包含15000张PDF格式的表格和他们对应的来自LaTeX源文件的结构标签。
项目的来源见GitHub链接,里面有数据集的下载链接。

数据集共有15000张图片,被拆分成12000张训练集和3000张测试集。也提供了只包含复杂表格的测试集,叫SciTSR-COMP。SciTSR-COMP的索引被存储在SciTSR-COMP.list中。

SciTSR数据集的统计如下:

TrainTest
# Tables12,0003,000
# Complicated tables2,885716

格式和样例

文件夹的树形结构如下:

SciTSR
├── SciTSR-COMP.list
├── test
│   ├── chunk
│   ├── img
│   ├── pdf
│   └── structure
└── train
    ├── chunk
    ├── img
    ├── pdf
    ├── rel
    └── structure

输入的PDF文件保存在pdf文件夹中,结构标签保存在structure文件夹中。
为了方便起见,我们提供了图片格式的输入,保存在img文件夹下面,它是利用pdfcairo从PDF文件转化过来的。
我们也提供了抽取好的块,保存在了chunk文件夹中,使用Tabby做的预处理。
对于训练数据,我们提供了为我们的GraphTSR模型构造好的关系标签,这是匹配chucks和结构文本标签生成的。
注意的是,我们的预处理chunk和关系数据可能包含噪声,原始输入文件是PDF格式的。

文本块

文件:chunk/[ID].chunk
pos数组包含chunk中x1, x2, y1y2坐标(对应PDF)。

{"chunks": [
  {
    "pos": [
      147.96600341796875,
      205.49998474121094,
      475.7929992675781,
      480.4206237792969
    ],
    "text": "Probability"
  },
  {
    "pos": [
      217.45510864257812,
      290.6802673339844,
      475.7929992675781,
      480.4206237792969
    ],
    "text": "Generated Text"
  },
  ...
 ]}

关系

文件:rel/[ID].rel
一行 CHUNK_ID_1 CHUNK_ID_2 RELATION_ID:NUM_BLANK代表CHUNK_ID_1的chunk和CHUNK_ID_2的chunk的关系是RELATION_ID,在他们中间有一个NUM_BLANK的空白单元格。对RELATION_ID, 1和2分别代表水平和竖直方向。

0 1 1:0
1 2 1:0
0 9 2:0
...

结构标签

文件:structure/[ID].json
表格的存储是一个单元格列表。对于每一个单元格,我们提供它原始的tex代码,内容(用空格切分)和表格中的位置(start/end row/column number, started from 0)。

{"cells": [
  {
    "id": 21,
    "tex": "959",
    "content": [
      "959"
    ],
    "start_row": 5,
    "end_row": 5,
    "start_col": 1,
    "end_col": 1
  },
  {
    "id": 1,
    "tex": "Training set",
    "content": [
      "Training",
      "set"
    ],
    "start_row": 0,
    "end_row": 0,
    "start_col": 1,
    "end_col": 1
  },
  ...
]}

在实际使用的时候,如果是做表格识别的话,那么使用pdf, chunk, structure这三个文件夹下的数据就够了。
做法是从pdf中抽取图片,从chunk中读取文本框坐标和内容信息,从structure中找出文本框在表格中对应的位置信息,有这些信息应该就可以组成表格检测数据集了。

注:

  1. SciTSR数据集里的img文件夹中的图片跟chunk中文本框的坐标是对应不上的,chunk中的坐标是跟pdf文件默认尺寸相关的。因此可以使用PyPDF2.PdfFileReader类来获取pdf尺寸,然后使用这个尺寸来读取pdf。
        pdf = PdfFileReader(open(pdf_filepath, 'rb'))
        pdf_size = pdf.getPage(0).mediaBox
        pdf_size = [int(round(ele)) for ele in pdf_size]
        pdf = convert_from_path(pdf_filepath, size=(pdf_size[2], pdf_size[3]))
        image = np.array(pdf[0], dtype=np.uint8)
    
  2. chunk中的文本框索引跟structure中的id可能会不一致,也就是可能存在chunk中的文本框数量跟structure中cell数量不同,我这里使用的方式是去除数量不一致的文件。根据文本内容应该也可以对应,我没有尝试。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值