SpringBoot整合文档解析神器Apache Tika
Apache tika是Apache开源的一个文档解析工具,它可以解析和提取一千多种不同的文件类型(如PPT、XLS和PDF)的内容和和元数据,对于图片、视频只能获取元数据信息。
1、感受tika
tika的架构组件还是比较简单的,其组件与各个部分的协调工作原理图如下所示:
其中Parser(解析器)用于解析文档内容,Language Detector(语言检测器)用于确定文本的语言,Metadata Extractor(元数据提取器)用于从文档中抽取元数据。tika也提供了图形操作页面,我们可以通过如下的地址去下载:
https://mirrors.tuna.tsinghua.edu.cn/apache/tika/2.9.2/tika-app-2.9.2.jar
下载好了之后可以看到是一个jar包,如下所示:
我们直接运行这个jar,运行的命令如下所示:
java -jar tika-app-2.9.2.jar
运行之后的图形化界面如下所示:
我们创建如下的一个测试PDF文件,文件的内容比较简单:
使用tika打开这个PDF文件,看看tika可以提供给我们关于文件的哪些数据信息,首选点击tika,然后选择file
得到的元数据信息如下所示:
然后选择view选项,可以看到更多的信息
选Formatted text可以看到文档的内容,如下所示:
也可以看PDF的文件的JSON形式的元数据信息,如下所示:
关于tika的更多的功能,龙虾在这里就不一一列举了,有兴趣的朋友再去探索一下。
2、Springboot整合tika
Springboot整合tika也是不复杂的,如下是搭建tika的项目结构图:
(1)添加tika的依赖
<dependencies>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-bom</artifactId >
<version >2.8.0</version >
</dependency>
<dependency>
<groupId >org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers-standard-package</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
(2)添加tika的配置信息文件(tika-config.xml)
<?xml version="1.0" encoding="UTF-8"?>
<p>
<encodingDetectors>
<encodingDetector class="org.apache.tika.parser.html.HtmlEncodingDetector">
<p>
<param name="markLimit" type="int">64000</param>
</params>
</encodingDetector>
<encodingDetector class="org.apache.tika.parser.txt.UniversalEncodingDetector">
<p>
<param name="markLimit" type="int">64001</param>
</params >
</encodingDetector>
<encodingDetector class="org.apache.tika.parser.txt.Icu4iEncodingDetector">
<p>
<param name="markLimit" type="int">64002</param>
</params >
</encodingDetector>
</encodingDetectors>
</properties>
(3)Springboot中配置tika
@Configuration
public class MyTikaConfig {
@Resource
private ResourceLoader resourceLoader;
@Bean
public Tika tika() throws TikaException, IOException, SAXException {
org.springframework.core.io.Resource resource = resourceLoader.getResource("classpath:tika-config.xml");
InputStream inputstream = resource.getInputStream();
TikaConfig config = new TikaConfig(inputstream);
Detector detector = config.getDetector();
Parser autoDetectParser = new AutoDetectParser(config);
return new Tika(detector, autoDetectParser);
}
}
(4)controller测试类
@RestController
@RequestMapping("/parse")
public class TikaController {
@Resource
private Tika tika;
@GetMapping("/pdf")
public String parsePdf() throws TikaException, IOException {
String filePath = "C:Users1Desktop" + File.separator + "test.pdf";
File file = new File(filePath);
String data =tika.parseToString(file);
System.out.println("pdf文件中的内容为:"+ data);
return data;
}
}
(5)测试
在网页上请求地址:http://localhost:8081/parse/pdf
到这里我们就完成PDF中内容的解析,也可以做PDF的元数据解析,这里就没有测试了。
总结:
(1)tika可以检测和获取文件的文本内容和元数据。支持文件类型众多(PPT, XLS, and PDF,txt、doc等等),对于图片、视频只能获取元数据信息。
(2)tika在搜索引擎、内容分析、翻译方面都得到广泛的使用