我有大量的pdf文件,我需要从中提取文本。我用于进一步处理的提取文本。我以线性方法使用tesseract api对一小部分文档执行了此操作,得到了所需的输出。但是,当我有大量文档时,这需要很长时间。
我尝试使用hadoop环境处理功能(map reduce)和存储(hdfs)来解决这个问题。然而,在hadoop(map-reduce)方法中实现tesseract-api面临着一个问题。当teserract将文件转换为中间图像文件时,我对teserract api进程的中间结果图像文件如何在hdfs中处理感到困惑。
我搜索了一些选项,但没有成功,比如:
我通过使用hadoop map reduce将fileinputformat类扩展到我自己的pdfinputformat类,从pdf中提取了文本,为此我使用了apache pdfbox从pdf中提取文本,但是当涉及到包含图像的扫描pdf时,此解决方案并没有给出所需的结果。
我发现在同一个主题上很少有答案说使用-fuse,这将有助于或一个人应该在本地生成图像文件,然后上传到hdfs进行进一步处理。不确定这是不是正确的方法。
想知道这方面的方法。
1条答案
按热度按时间apeeds0o1#
这是一种利用hadoop框架的强大功能处理多个pdf以提取文本,然后使用此文本进行进一步处理的方法:
将所有要转换为文本的PDF放在一个文件夹中。
为每个pdf创建一个文本文件,以包含pdf的路径。e、 g.如果我有10个pdf要转换,那么我会生成10个文本文件,每个文件都包含各自pdf的唯一路径。
这些文本文件作为map reduce程序的输入
因为输入文件的大小非常小,所以框架只为1个输入生成1个输入拆分。e、 如果我有10个PDF作为输入,那么框架将生成10个输入拆分。
从每个输入分割中,记录读取器读取一行(记录),并将其作为值传递给一个Map器。所以,如果输入文本文件中有10条记录(行==文件路径),Map器将运行10次。因为每个输入分割有一条记录,所以分配了一个mapper reducer来执行该输入分割的任务。
由于我有10个输入分裂10Map器将运行,并行。
在mapper ghost脚本内部,通过mapper value属性传递文件名来生成图像。使用Map器内部的tesseract将图像转换为文本,以获取每个pdf的文本。这是输出。
这是传递给减速机做其他需要的分析工作。
这是当前的解决方案。希望得到反馈。