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

Need to implement bulk PDF extraction using Tesseract API

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

我尝试使用Hadoop环境处理能力(Map-Reduce)和存储(HDFS)来解决这个问题。但是,我在将 Tesseract API 实施到 Hadoop (Map-Reduce) 方法中时遇到了问题。由于 Teserract 将文件转换为中间图像文件,我对如何在 HDFS 中处理 Tesseract-API-process 的中间结果图像文件感到困惑。

我已经搜索过但没有成功尝试过几个选项,例如:

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

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

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

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

  1. 将所有要转换为文本的 PDF 放在一个文件夹中。
  2. 为每个 pdf 创建一个文本文件以包含 pdf 的路径。例如如果我有 10 个要转换的 pdf,那么我会生成 10 个文本文件,每个文件都包含各自 pdf 的唯一路径。
  3. 这些文本文件在 map-reduce 程序中作为输入给出
  4. 因为输入文件非常小,框架只为 1 个输入生成 1 个输入分割。例如,如果我有 10 个 pdf 作为输入,那么框架将生成 10 个输入拆分。
  5. 记录-Reader从每个输入拆分中读取一行(记录)并作为值传递给一个映射器。因此,如果输入文本文件中有 10 条记录(行==文件路径),则 10 次映射器将 运行。因为我每个输入拆分有一个记录,所以分配了一个映射器缩减器来完成该输入拆分的任务。
  6. 因为我有 10 个输入拆分 10 个映射器 运行,并行。
  7. 在 Mapper 内部 ghost-script 生成图像,从 Mapper value 属性传递文件名。使用映射器本身内部的 Tesseract 将图像转换为文本,以获取每个 pdf 的文本。这是输出。
  8. 这将传递给减速器以根据需要进行其他分析工作。

这是当前的解决方案。希望得到反馈。