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在搜索引擎、内容分析、翻译方面都得到广泛的使用

5