需要使用 Tesseract API 实现批量 PDF 提取



我有大量的PDF文档,我需要从中提取文本。我用于进一步处理的提取文本。我以线性方法使用 Tesseract API 对一小部分文档执行此操作,并获得了所需的输出。但是,当我有大量文档时,这需要很长时间。

我尝试使用Hadoop环境处理功能(Map-Reduce)和存储(HDFS)来解决这个问题。但是,我面临着将Tesseract API实现到Hadoop(Map-Reduce)方法中的问题。当Teserract将文件转换为中间图像文件时,我对如何在HDFS中处理Tesseract-API进程的中间结果图像文件感到困惑。

我之前搜索过并尝试了一些选项,例如:

  1. 我通过使用Hadoop-Map-Reduce将FileInputFormat类扩展到我自己的PdfInputFormat类中,从PDF中提取文本,为此我使用Apache PDFBox从pdf中提取文本,但是当涉及到包含图像的scanned-pdf时,此解决方案没有给我所需的结果。

  2. 我发现关于同一主题的答案很少,说明使用 -Fuse,这将有所帮助,或者应该在本地生成图像文件,然后将其上传到 hdfs 中进行进一步处理。不确定这是否是正确的方法。

想知道解决这个问题的方法。

这是一种使用Hadoop框架的强大功能处理多个pdf以提取文本的方法,然后使用此文本进行进一步处理:

  1. 将所有要转换为文本的 PDF 放在一个文件夹中。
  2. 为每个 pdf 创建一个文本文件以包含 pdf 的路径。
  3. 例如,如果我有 10 个 pdf 要转换,那么我生成了 10 个文本文件,每个文件都包含相应 pdf 的唯一路径。
  4. 这些文本文件作为map-reduce程序中的输入给出
  5. 由于输入文件大小非常小,框架仅为 1 个输入生成 1 个输入拆分,例如,如果我有 10 个
  6. pdf 作为输入,那么框架将生成 10 个输入拆分。
  7. 从每个输入拆分中,记录读取器读取一行(记录)并作为值传递给一个映射器。因此,如果输入文本文件中有 10 条记录(行==文件路径),将运行 10 次映射器。由于我每个输入拆分都有一条记录,因此分配了一个映射器-化简器来执行该输入拆分的任务。
  8. 因为我有 10 个
  9. 输入拆分 10 个映射器将并行运行。
  10. 在映射器
  11. 内部,鬼脚本生成图像,从映射器值属性传递文件名。使用映射器本身内的Tesseract将图像转换为文本,以获取每个pdf的文本。这是输出。
  12. 这被传递给化简器以根据需要执行其他分析工作。

这是当前的解决方案。希望对此提供反馈。

最新更新