如何使用PDFminer提取PDF页面区域内的文本?

时间:2019-07-15 00:51:05

标签: python pdfminer

作为数字化和数据挖掘项目的一部分,我正在尝试从PDF页面的表格中提取文本和数字数据。

要处理的PDF文档数量超过80,000,每个文档可能有4至80页,其中包含图像,文本,注释和几种类型的表格。我已经成功地使用PDFMiner来处理页面并从中收集最相关的数据,但是,在尝试了多种技术的许多星期之后,我未能从表中获取完美的数据。不幸的是,这些表有几种布局:它们的某些列是对齐的(对齐在单词之间添加了空格),某些单元格有很多行,整个表中的行距都不同,并且还有多列单元格。当应用于表处理时,字符页边距,行页边距和单词页边距的参数可为常见页面提供最佳性能,从而产生混乱的结果。幸运的是,有3/4的表具有垂直和水平线,可用于将其区域划分为多个单元格并查找每个单元格的坐标。但是,由pdfminer.pdfinterp.PDFPageInterpreter和pdfminer.converter.PDFPageAggregator带来的LTText实例通常不遵守每个单元格的边界。我花了很多天尝试各种技术,包括更改laparams以及字符串解释和拆分,以获取和使用由整个页面处理生成的LTText实例。 真正有用的方法是将解释器.process_cell(页面,xmin,ymin,xmax,ymax)替换为解释器.process_page(p)

我相信,如果有一些使用PDFMiner函数的方法和一些方法来获取封闭在单元格边界内的对象,并使用保守的参数以避免混乱的结果,则可能存在解决方案。理想的方法应该足够快,因为它必须被多次应用。在StackOverflow中搜索时,我发现了Extracting text from PDF page's certain areas?,这很相似,但是没有得到回答。我还发现了Extract area from pdfExtract PDF text by coordinates,它们使用了其他库和技术。我不想混合使用不同的库及其对象来解决该问题,因为PDFMiner在恢复表以外的所有信息方面确实非常有效。有人有建议吗?

1 个答案:

答案 0 :(得分:0)

首先,将pdf转换为图像。

第二,获取灰度并对该图像进行阈值处理。

最后,应用Tesseract,您将在PDF中获得所有文本和数字(而不是数字)。

在这里,只需点击以下链接:https://www.pyimagesearch.com/2017/07/10/using-tesseract-ocr-python/