gpt4 book ai didi

java - Apache Tika 提取扫描的 PDF 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:57 26 4
gpt4 key购买 nike

我在使用 Apache TIKA(版本 1.10)时遇到了一些问题。我得到了一些 PDF 文件,它们只是扫描的纸片。这意味着每个页面只是一个图像。我的目标是提取 PDF 文件的文本。

我的 tesseract 设置正确,提取 JPG 和 PNG 文件非常有效。我正在使用的代码看起来像这样(不要介意丢失的异常处理):

public String extractText(InputStream stream) {
AutoDetectParser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler(Integer.MAX_VALUE);
Metadata metadata = new Metadata();
ParseContext context = new ParseContext();
parser.parse(stream, handler, metadata, context);
String text = handler.toString();
return text;
}

我搜索了很多,但没有找到适合我的解决方案。我已经尝试了 PDFParserConfig 类的 setExtractInlineImages 方法,但这并没有改变任何事情。使用自定义 ParsingEmbeddedDocumentExtractor 提取嵌入式文档确实提取了 doc 文件的嵌入式资源,但不是我的 PDF 文件。

如果你们中的任何人能提供一些帮助,那就太棒了:)

最佳答案

Tim Allison带来了解决方案:

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);
parseContext.set(Parser.class, parser); //need to add this to make sure recursive parsing happens!

parser.parse(stream, handler, new Metadata(), parseContext);

这对我有用:)

编辑:这是完整的解决方案:

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.ocr.TesseractOCRConfig;
import org.apache.tika.parser.pdf.PDFParserConfig;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.SAXException;

import java.io.FileInputStream;
import java.io.IOException;

/**
* @since 8/26/16
*/
public class Sample {
public static void main(String[] args)
throws IOException, TikaException, SAXException {
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);

FileInputStream stream = new FileInputStream("samplepdf.pdf");
Metadata metadata = new Metadata();
parser.parse(stream, handler, metadata, parseContext);
System.out.println(metadata);
String content = handler.toString();
System.out.println("===============");
System.out.println(content);
System.out.println("Done");
}
}

Maven 依赖项:

<dependencies>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>com.levigo.jbig2</groupId>
<artifactId>levigo-jbig2-imageio</artifactId>
<version>1.6.5</version>
</dependency>
</dependencies>

关于java - Apache Tika 提取扫描的 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32354209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com