使用Apache Tika + Tesseract提取扫描PDF的速度缓慢

3

来自Apache Tika提取扫描的PDF文件,对于扫描文档它完全正常工作。但问题在于,它花费的时间太长,同时CPU利用率也很高。

在我的情况下,大小为15 MB,有23页的文件需要大约~4.5分钟的时间,这太高了。请见下面是我的工作代码:

Parser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler(Integer.MAX_VALUE);

TesseractOCRConfig config = new TesseractOCRConfig();
PDFParserConfig pdfConfig = new PDFParserConfig();
pdfConfig.setExtractInlineImages(true);

ParseContext parseContext = new ParseContext();
parseContext.set(TesseractOCRConfig.class, config);
parseContext.set(PDFParserConfig.class, pdfConfig);
//need to add this to make sure recursive parsing happens!
parseContext.set(Parser.class, parser);

Metadata metadata = new Metadata();
parser.parse(inputStream, handler, metadata, parseContext);
String content = handler.toString();

如何使其更加优化/快速?有什么建议吗?


如果关闭Tesseract OCR,速度会快多少? - Gagravarr
是的,没有它很快,但无法从扫描PDF中提取文本。我之前已经实现过没有tesseract的版本。AutoDetectParser parser = new AutoDetectParser(); parser.parse(stream, handler, new Metadata(), new ParseContext()); String content = handler.toString(); - Darshan Patel
1
听起来你的问题不是在Tika上,而是如何让Tesseract表现得像样,这很可能取决于你的Tesseract版本、配置和操作系统。 - Gagravarr
1个回答

0
正如@Gagravarr在评论中提到的那样,这不是Tika速度慢的问题,因为Tesseract是CPU密集型的进程。
为了解决这个问题,我将这个进程分离到另一台服务器上,使用FIFO方法。这样每次只处理一个文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接