Tabled 是一个用于检测和提取表的小型库。 它使用 surya 查找 PDF 中的所有表格,识别行/列,并将单元格格式设置为 markdown、csv 或 html。
特征 | 人口 | 2016年至2060年的变化 | ||||||
---|---|---|---|---|---|---|---|---|
2016年 | 2020年 | 2030年 | 2040年 | 2050年 | 2060 | 数字 | 百分比 | |
总人口 | 323.1 | 332.6 | 355.1 | 373.5 | 388.9 | 404.5 | 81.4 | 25.2 |
18岁以下 | 73.6 | 74.0 | 75.7 | 77.1 | 78.2 | 80.1 | 6.5 | 8.8 |
18至44岁 | 116.0 | 119.2 | 125.0 | 126.4 | 129.6 | 132.7 | 16.7 | 14.4 |
45至64岁 | 84.3 | 83.4 | 81.3 | 89.1 | 95.4 | 97.0 | 12.7 | 15.1 |
65岁及以上 | 49.2 | 56.1 | 73.1 | 80.8 | 85.7 | 94.7 | 45.4 | 92.3 |
85岁及以上 | 6.4 | 6.7 | 9.1 | 14.4 | 18.6 | 19.0 | 12.6 | 198.1 |
100岁及以上 | 0.1 | 0.1 | 0.1 | 0.2 | 0.4 | 0.6 | 0.5 | 618.3 |
Discord 是我们讨论未来发展的地方。
这里有一个用于表的托管 API:
适用于 PDF、图像、Word 文档和 Powerpoint
一致的速度,无延迟峰值
高可靠性和正常运行时间
我希望尽可能广泛地使用 Tablet,同时仍然为我的开发/培训成本提供资金。研究和个人使用总是可以的,但商业用途有一些限制。
模型的权重已获得cc-by-nc-sa-4.0
,但对于最近 12 个月内总收入低于 500 万美元且终生风险投资/天使投资低于 500 万美元的任何组织,我将放弃该权重提出。您也不得与 Datalab API 竞争。 如果您想删除 GPL 许可证要求(双重许可证)和/或在收入限制之上使用商业权重,请查看此处的选项。
您需要 python 3.10+ 和 PyTorch。如果您不使用 Mac 或 GPU 机器,您可能需要先安装 CPU 版本的 torch。 请参阅此处了解更多详细信息。
安装:
pip 安装 tabled-pdf
安装后:
检查tabled/settings.py
中的设置。 您可以使用环境变量覆盖任何设置。
系统将自动检测您的手电筒设备,但您可以覆盖此设置。 例如, TORCH_DEVICE=cuda
。
模型权重将在您第一次运行时自动下载。
表格 DATA_PATH
DATA_PATH
可以是图像、pdf 或图像/pdf 文件夹
--format
指定每个表的输出格式( markdown
、 html
或csv
)
--save_json
将额外的行和列信息保存在 json 文件中
--save_debug_images
保存显示检测到的行和列的图像
--skip_detection
表示你传入的图像都是裁剪后的表格,不需要任何表格检测。
--detect_cell_boxes
默认情况下,tabled 将尝试从 pdf 中提取单元格信息。 如果您希望通过检测模型检测单元格,请指定此项(通常只有嵌入文本错误的 pdf 才需要此设置)。
--save_images
指定应保存检测到的行/列和单元格的图像。
运行脚本后,输出目录将包含与输入文件名具有相同基本名称的文件夹。 这些文件夹内将包含源文档中每个表的 markdown 文件。 还可以选择提供表格的图像。
输出目录的根目录中还会有一个results.json
文件。该文件将包含一个 json 字典,其中键是不带扩展名的输入文件名。 每个值都是一个字典列表,文档中的每个表都有一个。 每个表字典包含:
cells
- 每个表格单元格检测到的文本和边界框。
bbox
- 表 bbox 内单元格的 bbox
text
- 单元格的文本
row_ids
- 单元格所属行的 id
col_ids
- 单元格所属列的 ID
order
- 该单元格在其指定的行/列单元格中的顺序。 (按行排序,然后按列排序,然后按顺序排序)
rows
- 检测到的行的bboxes
bbox
- (x1, x2, y1, y2) 格式的行的 bbox
row_id
- 行的唯一 ID
cols
- 检测到的列的 bboxes
bbox
- (x1, x2, y1, y2) 格式的列的 bbox
col_id
- 列的唯一 ID
image_bbox
- (x1, y1, x2, y2) 格式的图像的 bbox。 (x1, y1) 是左上角,(x2, y2) 是右下角。 表bbox与此相关。
bbox
- 图像 bbox 内表格的边界框。
pnum
- 文档中的页码
tnum
- 页面上的表索引
我提供了一个 Streamlit 应用程序,可让您以交互方式尝试在图像或 PDF 文件上放置表格。 运行它:
pip 安装 Streamlit 表格图形用户界面
从 tabled.extract 导入 extract_tablesfrom tabled.fileinput 导入 load_pdfs_imagesfrom tabled.inference.models 导入 load_detection_models、load_recognition_modelsdet_models、rec_models = load_detection_models()、load_recognition_models()images、highres_images、names、text_lines = load_pdfs_images(IN_PATH)page_results = extract_tables(图像、highres_images、text_lines、det_models、rec_models)
平均分 | 每桌时间 | 总桌数 |
---|---|---|
0.847 | 0.029 | 第688章 |
为表获取良好的地面实况数据很困难,因为您要么受限于可以启发式解析和渲染的简单布局,要么需要使用会出错的 LLM。 我选择使用 GPT-4 表预测作为伪真实值。
与 GPT-4 相比,Tabled 的对齐得分为.847
,这表明表行/单元格中的文本之间的对齐情况。 一些错位是由于 GPT-4 错误或 GPT-4 认为的表格边界中的小不一致造成的。 一般来说,提取质量相当高。
在使用 10GB VRAM 且批量大小为64
A10G 上运行,每个表需要.029
秒。
使用以下命令运行基准测试:
python 基准/benchmark.py out.json
感谢 Peter Jansen 提供的基准测试数据集以及有关表解析的讨论。
Huggingface 用于推理代码和模型托管
用于训练/推理的 PyTorch