views:

791

answers:

2

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'm looking for something that's a bit more advanced. 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? Or am I forced to do some post-processing on the output text to get rid of these sections?

Any ideas & thoughts would be greatly appreciated. Thank you.

+1  A: 

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.

akaihola
+1  A: 

You can also take a look at PDFMiner, an other PDF parser in Python.

The particularity of PDFMiner that can interest you is that you can control how it regroup text parts when doing the extracting. You do this by specifing the the space between lines, words, characters, etc. So, maybe by tweeking 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 continous, 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.

Etienne
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.
Mike Cialowicz