我无法以pdf格式从下面附加的图像中提取内容,但是当我将其转换为jpg格式时它可以正常工作。我的问题是我有大量扫描的PDF文件,里面有多个扫描页面。我想看看是否有直接的方法来提取内容,而不是将pdf转换为jpg然后提取文本的开销。我按照link
提供的解决方案pdf版本的doc是pdfversion
我的java版本" 1.8.0_112",tesseract 3.04.01,leptonica-1.74.1, libjpeg 8d:libpng 1.6.28:libtiff 4.0.7:zlib 1.2.8
pom.xml
<dependencies>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.14</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.14</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tika/tika-parsers -->
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>com.levigo.jbig2</groupId>
<artifactId>levigo-jbig2-imageio</artifactId>
<version>1.6.5</version>
</dependency>
</dependencies>
java代码
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.File;
import java.io.FileInputStream;
import java.io.IOException;
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();
config.setTesseractPath("/usr/local/bin/");
PDFParserConfig pdfConfig = new PDFParserConfig();
pdfConfig.setExtractInlineImages(true);
pdfConfig.setExtractUniqueInlineImagesOnly(false);
ParseContext parseContext = new ParseContext();
parseContext.set(TesseractOCRConfig.class, config);
parseContext.set(PDFParserConfig.class, pdfConfig);
parseContext.set(Parser.class, parser);
FileInputStream stream = new FileInputStream(new File("path2pdf.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");
}
}
答案 0 :(得分:1)
问题似乎是Tika调用tesseract(一旦它验证了二进制存在且可以执行),如果没有明确设置配置参数,则不指定环境中tessdata
目录的位置(这种默认设置可能适用于某些安装,但不适用于我的Mac)。可以按以下方式明确设置路径:
TesseractOCRConfig config = new TesseractOCRConfig();
config.setTesseractPath("/usr/local/bin");
config.setTessdataPath("/usr/local/share");
然后产生预期的结果(至少在MacOS X上通过自制软件安装tesseract):
1关系学习的条件随机场简介
查尔斯萨顿美国马萨诸塞大学计算机科学系 casutton-@cs.umass.edu http://www.cs.umass.edu/~casutton
Andrew McCallum
美国马萨诸塞大学计算机科学系 mccallum@cs.umass.edu http://www.cs.umass.edu/~mccallum
1.1简介
关系数据有两个特征:第一,统计 我们希望建模的实体之间存在依赖关系,其次, 每个实体通常都有丰富的功能,可以提供帮助 CLASSI科幻阳离子。例如,在对Web文档进行分类时。页面的 text提供了有关类标签的大量信息。但超链接 定义可以改善分类的页面之间的关系 [Taskar等人,2002年]。图形模型是一种自然的形式主义 利用实体之间的依赖结构。传统上, 图形模型已被用于表示联合概率 分布p(y,x),其中变量y代表属性 我们希望预测的实体和输入变量x 代表我们观察到的有关实体的知识。但建模 当使用富裕的本地时,联合分配可能导致困难 关系数据中可能出现的功能。因为它需要 对分布p(x)进行建模,其中包括复数 依赖。在输入之间建模这些依赖关系可以导致 难以处理的模型,但忽略它们会导致性能下降。
此问题的解决方案是直接对条件建模 分布p(y] x),足以进行分类。这是 有条件的随机场所采取的方法[Lafferty等,2001]。 条件随机场只是一个条件分布p(ylx) 具有相关的图形结构。因为模型是