点击上方“程序员蜗牛g”,选择“设为星标”
跟蜗牛哥一起,每天进步一点点

程序员蜗牛g
大厂程序员一枚 跟蜗牛一起 每天进步一点点
33篇原创内容
公众号
Apache Tika 是一款功能强大的内容分析工具包,旨在从各种文件格式中提取结构化文本和元数据。
Spring Boot 整合 Apache Tika:实战步骤
一)pom.xml文件添加 Apache Tika 依赖
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.26</version> <!-- 这里版本根据实际情况调整 -->
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.26</version> <!-- 这里版本根据实际情况调整 -->
</dependency>
-
•
tika-core是 Apache Tika 的核心依赖,它提供了文件类型检测、基本的解析功能以及与其他组件交互的基础接口。就像是 Tika 大厦的基石,支撑着整个 Tika 功能体系的运行。 -
•
tika-parsers则包含了各种文件格式的解析器,如 PDF、Word、Excel 等常见文件格式的解析实现。它让 Tika 具备了读懂各种文件 “语言” 的能力,是实现多格式文件解析的关键。
二)配置 Apache Tika
为了让 Apache Tika 按照我们的需求工作,我们需要创建一个配置文件。
在 src/main/resources 目录下创建一个名为tika-config.xml的文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<encodingDetectors>
<encodingDetector class="org.apache.tika.parser.html.HtmlEncodingDetector">
<params>
<param name="markLimit" type="int">64000</param>
</params>
</encodingDetector>
<encodingDetector class="org.apache.tika.parser.txt.UniversalEncodingDetector">
<params>
<param name="markLimit" type="int">64001</param>
</params>
</encodingDetector>
<encodingDetector class="org.apache.tika.parser.txt.Icu4jEncodingDetector">
<params>
<param name="markLimit" type="int">64002</param>
</params>
</encodingDetector>
</encodingDetectors>
</properties>
这个配置文件主要配置了编码检测器。不同的编码检测器用于检测不同类型文件的字符编码。

三)创建 Tika 配置类
在 Spring Boot 项目中,我们通过创建一个配置类来将 Tika 实例注入到 Spring 容器中,以便在其他组件中方便地使用。
在项目的配置包(如com.example.springboottikademo.config)下创建一个名为TikaConfig.java的类,代码如下:
import org.apache.tika.Tika;
import org.apache.tika.config.TikaConfig;
import org.apache.tika.detect.Detector;
import org.apache.tika.exception.TikaException;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.Parser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.io.InputStream;
@Configuration
public class TikaConfig {
@Autowired
private ResourceLoader resourceLoader;
@Bean
public Tika tika() throws TikaException, IOException, SAXException {
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);
}
}
在这个配置类中:

数据提取实战:多种文件格式解析
下面,我们通过具体的代码示例,来看看如何解析文本文件、PDF 文件以及办公文档(如 Word、Excel 等)。
一)解析文本文件
文本文件是最常见的文件类型之一,解析文本文件是数据提取的基础操作。在我们的 Spring Boot 项目中,使用 Apache Tika 解析文本文件非常简单。假设我们有一个名为parseTxtFile的方法,用于解析文本文件,代码如下:
import org.apache.tika.Tika;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
@Service
public class FileParserService {
@Autowired
private Tika tika;
public String parseTxtFile(String filePath) {
try {
File file = new File(filePath);
return tika.parseToString(file);
} catch (IOException e) {
e.printStackTrace();
return "解析文件时出错: " + e.getMessage();
}
}
}
在这段代码中:

我们可以通过以下方式测试这个方法:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class FileParserServiceTest {
@Autowired
private FileParserService fileParserService;
@Test
public void testParseTxtFile() {
String filePath = "src/test/resources/sample.txt";
String content = fileParserService.parseTxtFile(filePath);
System.out.println("文本文件内容: " + content);
}
}
在测试方法中,先通过@Autowired注入FileParserService实例,然后指定要解析的文本文件路径,调用parseTxtFile方法进行文件解析,并将解析结果打印输出。从输出结果中,我们可以看到文本文件中的内容被完整地提取出来,这表明 Tika 能够准确地解析文本文件。
二)解析 PDF 文件
PDF 文件由于其格式的特殊性,在数据提取方面具有一定的挑战性。不过,借助 Apache Tika,我们可以轻松地从 PDF 文件中提取文本内容。解析 PDF 文件的代码与解析文本文件的代码结构相似,只是文件路径和文件类型不同。以下是解析 PDF 文件的代码示例:
public String parsePdfFile(String filePath) {
try {
File file = new File(filePath);
return tika.parseToString(file);
} catch (IOException e) {
e.printStackTrace();
return "解析文件时出错: " + e.getMessage();
}
}
这段代码与解析文本文件的代码几乎一样,唯一的区别在于传入的文件路径是指向 PDF 文件的路径。这充分体现了 Apache Tika 的强大之处,它通过统一的接口,让我们可以用几乎相同的方式处理不同类型的文件。
同样,我们可以编写测试方法来验证解析 PDF 文件的功能:
@Test
public void testParsePdfFile() {
String filePath = "src/test/resources/sample.pdf";
String content = fileParserService.parsePdfFile(filePath);
System.out.println("PDF文件内容: " + content);
}
运行测试方法后,我们可以看到 PDF 文件中的文本内容被成功提取出来并输出。虽然 PDF 文件在格式上比文本文件复杂得多,可能包含多种字体、图像、表格等元素,但 Tika 能够智能地处理这些复杂情况,准确地提取出其中的文本信息。例如,对于一份包含图文混排的 PDF 报告,Tika 能够将其中的文字部分完整地提取出来,为后续的数据分析和处理提供了便利。
三)解析办公文档(如 Word、Excel 等)
办公文档如 Word、Excel 在日常工作中广泛使用,从这些文档中提取数据也是常见的需求。以 Word 文档为例,使用 Apache Tika 解析 Word 文档的代码如下:
public String parseWordFile(String filePath) {
try {
File file = new File(filePath);
return tika.parseToString(file);
} catch (IOException e) {
e.printStackTrace();
return "解析文件时出错: " + e.getMessage();
}
}
从代码上看,与解析文本文件和 PDF 文件几乎一致,这再次展示了 Tika 统一接口带来的便利性。无论是简单的文本文件,还是复杂的 PDF 文件,亦或是办公文档,我们都可以使用相同的parseToString方法来进行解析。
测试解析 Word 文档的方法如下:
@Test
public void testParseWordFile() {
String filePath = "src/test/resources/sample.docx";
String content = fileParserService.parseWordFile(filePath);
System.out.println("Word文件内容: " + content);
}
运行测试后,我们会发现 Word 文档中的文本内容,包括标题、段落、列表等信息,都被准确地提取出来。Apache Tika 对不同办公文档格式的支持非常全面,无论是旧版的.doc格式,还是新版的.docx格式,亦或是 Excel 的.xls和.xlsx格式,PowerPoint 的.ppt和.pptx格式,Tika 都能准确识别并解析,满足我们在各种办公场景下的数据提取需求。比如,在处理一份包含复杂表格和格式设置的 Excel 文件时,Tika 能够将表格中的数据和文本内容准确提取,为数据分析和处理提供基础数据。
五、应用场景拓展:数据提取的广泛应用
Spring Boot 整合 Apache Tika 实现的数据提取功能,在众多领域都有着广泛的应用,为各种业务场景提供了强大的数据支持。
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。
关注公众号:woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!
1299

被折叠的 条评论
为什么被折叠?



