Lightweight, performant, configurable, deep table extraction
Project description
gmft
give
me
formatted
tables!
There are many pdfs out there, and many of those pdfs have tables. But despite a plethora of table extraction options, there is still no definitive extraction method.
About
gmft is a toolkit for converting pdf tables to many formats, including cropped image, text + positions, plaintext, csv, and pandas dataframes.
gmft is lightweight, performant, and high-throughput. gmft aims to "just work", offering strong performance with the default settings.
gmft relies on microsoft's Table Transformers, which qualitatively is the most performant and reliable of many tested alternatives. See the comparison here.
Install: pip install gmft
Quickstart: demo notebook, bulk extract.
Documentation: readthedocs
Why use gmft?
TL;DR: gmft is fast, lightweight, configurable, and gives great results. Check out the bulk extract notebook for approximate extraction quality.
Many Formats
gmft supports the following export options:
- Pandas dataframe (!)
- By extension: csv, html, json, etc.
- List of text + positions
- Cropped image of table
Cropped images are useful for directly feeding into a vision recognizer, like:
- GPT4 vision
- Mathpix/Adobe/Google/Amazon/Azure/etc.
Cropped images are also excellent for verifying correctness of output.
Lightweight
No GPU necessary
Because of the relatively few dependencies and high throughput, gmft is very lightweight. This allows gmft to run on cpu.
High throughput
Benchmark using Colab's cpu indicates an approximate rate of ~1.381 s/page; converting to df takes ~1.168 s/table. See the comparison here. This makes gmft about 10x faster than alternatives like unstructured, nougat, and open-parse/unitable on cpu. Here's how:
- The base model, Smock et al.'s Table Transformer, is blazing fast.
- gmft focuses on table extraction, so figures, titles, sections, etc. are not extracted.
- In most cases, OCR is not necessary; pdfs already contain text positional data. Using this existing data drastically speeds up inference. With that being said, gmft can still extract tables from images and scanned pdfs through the image output.
- PyPDFium2 is chosen for its high throughput and permissive license.
Few dependencies
Many pdf extractors require detectron2, poppler, paddleocr, tesseract etc., many of which require additional external installation. Detectron2 is particularly difficult to install on windows. OCR models may require tesseract or paddleocr.
gmft can be installed in one line: pip install gmft
. But it may help to have transformers and pytorch preinstalled.
gmft mostly relies on pypdfium2 and transformers. On the first run, gmft downloads Microsoft's TATR from huggingface, which requires ~270mB total and is saved to ~/.cache/huggingface/hub/models--microsoft--table-{transformer-detection, structure-recognition}
and ~/.cache/huggingface/hub/models--timm--resnet18.a1_in1k
.
Reliable
gmft uses Microsoft's Table Transformer (TATR), which is trained on a diverse dataset PubTables-1M. Many alternative methods were considered, and TATR was ultimately chosen for several reasons, among them high reliability.
The authors are confident that the extraction quality is unmatched. When the model fails, it is usually an OCR issue, merged cell, or false positive. Even in these cases, the text is still highly useable. Alignment of a value to its row/column header tends to be very accurate because of the underlying procedural algorithm.
UniTable is a newer model which achieves SOTA results in many datasets like PubLayNet and FinTabNet. Though we plan to support Unitable in the future, Unitable is much larger (~1.5 GB) and takes about x90 longer to run on cpu. Therefore, TATR is still used for its higher throughput. In addition, experimentation shows comparable quality. Contrary to gmft, Unitable may fail first through misalignment because of misplaced html tags. This may impact use cases where alignment is critical.
We invite the reader to explore the comparison notebooks to survey your own use cases and compare results.
Modular
As models are loaded from huggingface hub, you can fine-tune a model and use it by specifying a huggingface path.
By subclassing the BasePDFDocument and BasePage classes, you are also able to support other PDF extraction methods (like PyMuPDF, PyPDF, pdfplumber etc.).
By subclassing TableDetector and TableFormatter, alternative table detection and structure extraction methods are also possible.
Discussion
New
[Experimental] Multi-indices (multiple column headers) are now supported in v0.2
with TATRFormatConfig.enable_multi_header = True
.
[Experimental] Spanning cells are now supported in v0.2
with TATRFormatConfig.semantic_spanning_cells = True
.
Rotated tables are now supported in v0.0.4
.
Limitations
False detection of references, indexes, and large columnar text.
Slightly askew tables.
Acknowledgements
A tremendous thank you to the PubTables1M (and Table Transformer) authors: Brandon Smock, Rohith Pesala, and Robin Abraham, for making gmft possible. The image->csv step is based on from TATR's inference.py code, but it has been rewritten with some adjustments for ease of use.
Thank you to Niels Rogge for porting TATR to huggingface and writing the visualization code.
Alternatives
See comparison.
Gmft focuses highly on pdf tables. Another great option is img2table, which is non-deep and attains great results.
Nougat is excellent for both pdf table extraction and document understanding. It outputs full mathpix markdown (.mmd), which includes latex formulas, bold/italics, and fully latex-typeset tables. However, a gpu is highly recommended.
For general document understanding, I recommend checking out open-parse, unstructured, surya, deepdoctection, and DocTR. Open-parse and unstructured do quite well on the same example pdfs in terms of extraction quality. Open-parse offers UniTable, a larger model which may achieve higher quality but runs much slower on cpu (see reliability section for more discussion.) Importantly, open-parse allows extraction of auxiliary information like headers, paragraphs, etc., useful for RAG.
License
gmft is released under MIT.
If you wish to use PyMuPDF, the file gmft/pdf_bindings/bindings_mu.py
is available but is packaged separately. bindings_mu.py
alone is released under AGPL 3.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.