PDF Parsing Using Python - extracting formatted and plain texts [closed]
Asked Answered
B

2

85

I'm looking for a PDF library which will allow me to extract the text from a PDF document. I've looked at PyPDF, and this can extract the text from a PDF document very nicely. The problem with this is that if there are tables in the document, the text in the tables is extracted in-line with the rest of the document text. This can be problematic because it produces sections of text that aren't useful and look garbled (for instance, lots of numbers mashed together).

I'd like to extract the text from a PDF document, excluding any tables and special formatting. Is there a library out there that does this?

Bellringer answered 4/12, 2009 at 17:28 Comment(0)
C
63

You can also take a look at PDFMiner (or for older versions of Python see PDFMiner and PDFMiner).

A particular feature of interest in PDFMiner is that you can control how it regroups text parts when extracting them. You do this by specifying the space between lines, words, characters, etc. So, maybe by tweaking this you can achieve what you want (that depends of the variability of your documents). PDFMiner can also give you the location of the text in the page, it can extract data by Object ID and other stuff. So dig in PDFMiner and be creative!

But your problem is really not an easy one to solve because, in a PDF, the text is not continuous, but made from a lot of small groups of characters positioned absolutely in the page. The focus of PDF is to keep the layout intact. It's not content oriented but presentation oriented.

Canonicals answered 5/12, 2009 at 3:7 Comment(8)
PDFMiner looks interesting. I be able to use the XML output from it, and then parse that to ignore what I don't want. This still requires substantial post-processing, but for now it's probably the best solution. Thank you.Bellringer
@Etienne, can this be used if the PDF has other language characters too?Saxophone
It should work with other language characters. Docs mention: CJK languages and vertical writing scripts support. Best way to be sure, test it!Canonicals
if you are looking for better performance and Py3 check this zderadicka.eu/parsing-pdf-for-fun-and-profit-indeed-in-python libpoppler with python binding is 10x faster then PDFminerOteliaotero
The pdfminer.six Python 3 port of PDFMiner is working well for meSleep
Starting from version 20191010, PDFMiner supports Python 3 onlyRheotaxis
Warning: As of 2020, PDFMiner is not actively maintained. The code still works, but this project is largely dormant. For the active project, check out its fork pdfminer.six.Amphithecium
@Amphithecium Thanks, I updated the answer with the community maintained version.Canonicals
J
2

That's a difficult problem to solve since visually similar PDFs may have a wildly differing structure depending on how they were produced. In the worst case the library would need to basically act like an OCR. On the other hand, the PDF may contain sufficient structure and metadata for easy removal of tables and figures, which the library can be tailored to take advantage of.

I'm pretty sure there are no open source tools which solve your problem for a wide variety of PDFs, but I remember having heard of commercial software claiming to do exactly what you ask for. I'm sure you'll run into them while googling.

Jackquelinejackrabbit answered 4/12, 2009 at 23:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.