数据提取竟如此简单!只需要SpringBoot 整合Apache Tika

点击上方“程序员蜗牛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实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值