我必须从发票和账单pdf文件中提取文本
文件布局可能会变得复杂,尽管它主要由表格填充。
我已经读过几十篇关于pdf格式的文章,我们的大脑掌握它是多么容易
,机器理解它的结构是多么困难。还下载了一些工具,如python的pdfminer和一些java工具,有些甚至具有基于规则的布局提取,如LA-PDBtext这些都是很棒的库,留给你最后一步。
Adobe还有一个名为exportPdf的在线服务,但无法定制。
底线,我知道为了从结构化的pdf文件中提取文本并将其转换为XML,应该有一定程度的手动工作。
我还发现了From Data Extractor,这是一个非自由工具,能够设置提取规则,声称可以完成这项工作,尽管很难找到合适的手册,并且它只能在Windows上运行。
我想我什至可以尝试将这些文件转换为图像并尝试 tesseract-ocr,但决定在我花更多时间之前在这里寻求建议。
如果有这样的经验的人给我一个提示,我将不胜感激。
我已经做了很多PDF提取,我可以确认,因为您已经发现开始这可能是一个痛苦的过程。要了解的重要事情之一是,PDF中没有"表格"的概念,只有恰好周围有线条的文本。此外,无法保证 PDF 代码中文本的线性顺序实际上与打印时的视觉顺序匹配。换句话说,不能保证"hello world"是按该顺序编写的,它可以是draw 'word' at coord 20 then draw 'hello' at coord 10
。大多数PDF创建者不会这样做,但仍然无法保证。PDF创建者(InDesign,Illustrator等)越有创意,文本就越难被表达出来。实际上,一旦设计师开始过多地弄乱字体,一些程序有时会一次输出一个字符的单词,每次都会稍微改变字体。
也就是说,我推荐你看过的第一个,LA-PDFText。您可以在发现模式 (blockify) 下运行它,您可以从中创建规则。我不再安装Java,所以我无法测试它,但它似乎很有希望。
您的第二个,A-PDF表单数据提取器,仅适用于实际的PDF表单。如果是这种情况,我建议只使用像iText/iTextSharp这样的开源解决方案。
最后一个 OCR 让我畏缩。我只是无法想象通过这些箍会比解析 PDF 获得更好的文本表示。但话又说回来,PDF是一种视觉格式,所以也许它会。
就我个人而言,我使用iText/iTextSharp来做这种事情,但我也喜欢以艰难的方式做事。
目前尚不清楚您是在寻找开发工具来自动从账单和发票中提取数据,还是只是为了非开发人员可以使用的一次性工具(实用程序)?
无论如何,这里有一些专门的工具,包括他们使用的引擎:
- Tabula(开源,专门设计用于从PDF表格中提取数据。可以导出 shell 脚本进行批处理,作为本地主机 Web 服务运行,由 JRuby Tabula 引擎提供支持)
- Viet OCR(开源.NET桌面实用程序,用于从PDF和图像中提取文本,基于tesseract oct引擎)
- Bytescout PDF Viewer(免费软件闭源.NET实用程序,检测并提取表格,包括扫描的发票,由PDF提取器SDK提供支持)
免责声明:我为ByteScout工作。