我正试图从资产负债表中提取某些字段。例如,我想知道以下资产负债表的“库存”值为1277838:
目前,我正在使用Tesseract将图像转换为文本。但是,这种转换会导致文本流,因此很难将字段与其值关联(因为这些值并不总是紧靠其对应字段的文本)。
经过一番搜索,我阅读了Tesseract可以使用uzn文件从一幅图像的区域读取。然而,资产负债表价值的特定区域可能会从一种形式转移到另一种形式,因此我对任何可以确定“库存”和1277838在同一条线上的解决方案感兴趣。理想情况下,我想要一个文本的网格结构输出(这样我就可以从空间上判断哪些文本块在同一行/列中)。
有谁能帮我解释一下我是怎么做到这一点的?
正如gaw89已经提到的,Tesseract可以输出比仅将文本作为流更多的信息。hocr fileformat还提供了每个段落、行、词的位置(边界框):
例如,您可以通过简单的
因此,这个词的边界框从183到204垂直跨越,对于这个标签的相应值,我们现在必须在相同的垂直空间中搜索框。例如,这可以通过
第二个结果包含目标值。您可以比较
bbox
的垂直坐标,以确保提取第一列。在本例中,命令
grep
已经足够了,但是肯定有其他方法可以做类似的事情。还要注意,正则表达式可能应该替换为其他一些计算,这取决于页面的倾斜程度。或者,您可以尝试使用开源的Tabula,它将尝试从pdf中提取表格数据。
我一直在使用Tesseract和Python(pytesseract库)执行类似的任务。我已经能够使用Tesseract的.hocr输出文件(https://en.wikipedia.org/wiki/HOCR)在页面上找到我的搜索词(例如“Inventory”)的位置,然后在页面的一个小部分上重新运行Tesseract,这使它对该区域的精度更高。下面是我用来分析来自Tesseract的HOCR输出的代码:
这允许我在HOCR文件中搜索合适的词并返回该词的边界框。然后,我可以稍微展开边界框,在页面的一个非常小的子集上运行Tesseract。这比仅仅对整个页面进行ocr处理要精确得多。显然,有些代码是我特别使用的,但它应该给你一个开始的地方。
This page对于找到要给Tesseract的适当参数非常有帮助。我发现页面分割模式对于获得图像小部分的准确结果非常重要。
相关问题 更多 >
编程相关推荐