Spring AI:Apache Tika 读取 Word、PPT 文档

历史文章

Spring AI:对接DeepSeek实战
Spring AI:对接官方 DeepSeek-R1 模型 ------ 实现推理效果
Spring AI:ChatClient实现对话效果
Spring AI:使用 Advisor 组件 - 打印请求大模型出入参日志
Spring AI:ChatMemory 实现聊天记忆功能
Spring AI:本地安装 Ollama 并运行 Qwen3 模型
Spring AI:提示词工程
Spring AI:提示词工程 - Prompt 角色分类(系统角色与用户角色)
Spring AI:基于 "助手角色" 消息实现聊天记忆功能
Spring AI:结构化输出 - 大模型响应内容
Spring AI:Docker 安装 Cassandra 5.x(限制内存占用)&& CQL
Spring AI:整合 Cassandra - 实现聊天消息持久化
Spring AI:多模态 AI 大模型
Spring AI:文生图:调用通义万相 AI 大模型
Spring AI:文生音频 - cosyvoice-V2
Spring AI:文生视频 - wanx2.1-i2v-plus
Spring AI:上手体验工具调用(Tool Calling)
Spring AI:整合 MCP Client - 调用高德地图 MCP 服务
Spring AI:搭建自定义 MCP Server:获取 QQ 信息
Spring AI:对接自定义 MCP Server
Spring AI:RAG 增强检索介绍
Spring AI:Docker 安装向量数据库 - Redis Stack
Spring AI:文档向量化存储与检索
Spring AI:提取 txt、Json、Markdown、Html、Pdf 文件数据,转换为 Document 文档

对于企业文档,Word 和 PPT 也是比较常见的格式,本文中,我们就尝试使用 Apache Tika 来读取它们并转换为 Document 文档。

Apache Tika 介绍

Apache Tika 是一个开源的 内容检测与分析工具包,用于从各种格式的文件(如 PDF, DOC/DOCX, PPT/PPTX, HTML等)中提取文本内容和元数据。它通过统一的 API 简化了文档解析的复杂性。

添加依赖

编辑 pom.xml, 添加 Tika 的包依赖:

java 复制代码
<!-- Tika -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-tika-document-reader</artifactId>
</dependency>

添加完成后,记得刷新一下 Maven, 将包下载到本地仓库中。

读取 word

准备一个word文档,将其复制到 /resources/document 目录下:

接着,在 /reader 包下,新建一个 MyTikaWordReader 阅读器类:

java 复制代码
@Component
public class MyTikaWordReader {

    @Value("classpath:/document/xxxx.docx")
    private Resource resource;

    public List<Document> loadWord() {
        // 新建 TikaDocumentReader 阅读器
        TikaDocumentReader tikaDocumentReader = new TikaDocumentReader(resource);
        // 读取并转换为 Document 文档集合
        List<Document> documents = tikaDocumentReader.get();

        // 文档分块
        TokenTextSplitter splitter = new TokenTextSplitter(); // 不设置任何构造参数,表示使用默认设置
        return splitter.apply(documents);
    }
}

上述代码中,我们通过 TikaDocumentReader 阅读器,读取完 Word 文件后,并转换为 Document 文档集合。然后通过 TokenTextSplitter 分割器,将文档分割成块 (Chunks)。

完成上述步骤后,编辑 ReaderController 控制器,声明一个 /read/word 接口,代码如下:

java 复制代码
@RestController
@RequestMapping("/read")
public class ReaderController {

    // 省略...
    @Resource
    private MyTikaWordReader tikaWordReader;

    // 省略...

    @GetMapping(value = "/word")
    public List<Document> readWord() {
        return tikaWordReader.loadWord();
    }

}

重启后端项目,请求上述接口,如下图所示,可以看到成功将 Word 文件中的内容,转换为了对应 Document 集合:

读取 ppt

再来测试一下 Tika 读取 PPT 文件,准备一个ppt文件

复制到 /resources/document 目录:

同样的步骤,在 /reader 包下,新建一个 MyTikaPptReader 阅读器类:

java 复制代码
@Component
public class MyTikaPptReader {

    @Value("classpath:/document/xxxx.pptx")
    private Resource resource;

    public List<Document> loadPpt() {
        // 新建 TikaDocumentReader 阅读器
        TikaDocumentReader tikaDocumentReader = new TikaDocumentReader(resource);
        // 读取并转换为 Document 文档集合
        List<Document> documents = tikaDocumentReader.get();

        // 文档分块
        // 使用自定义设置
        TokenTextSplitter splitter = new TokenTextSplitter(1000, 400, 10, 5000, true);
        return splitter.apply(documents);
    }
}

上述代码中,和读取 Word 文件逻辑不同,TokenTextSplitter 分割器配置了自定义参数,构造器各项参数作用如下:

  • defaultChunkSize: 每个文本块的目标大小,以 Token 令牌数为单位(默认:800 tokens)。
  • minChunkSizeChars: 每个文本块的最小字符大小(默认:350 characters)。
  • minChunkLengthToEmbed: 要包含的块的最小长度(默认:5)。
  • maxNumChunks: 从一个文本生成的最大块数(默认:10000)。
  • keepSeparator: 是否在块中保留分隔符(如换行符)(默认:true)。

完成上述步骤后,编辑 ReaderController 控制器,声明一个 /read/ppt 接口,代码如下:

java 复制代码
@RestController
@RequestMapping("/read")
public class ReaderController {

    // 省略...
    
    @Resource
    private MyTikaPptReader tikaPptReader;

    // 省略...

    @GetMapping(value = "/ppt")
    public List<Document> readPpt() {
        return tikaPptReader.loadPpt();
    }

}

重启后端项目,浏览器请求上述接口,可以看到 PPT 也能够被读取并转换为 Document 文档集合:

相关推荐
小雨下雨的雨3 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
我没胡说八道5 小时前
高校论文AI检测优化工具对比研究与实测分析(2026)
人工智能·深度学习·机器学习·计算机视觉·aigc·论文
秦亚伟6 小时前
AI浪潮重塑融资租赁行业新格局
人工智能
love530love6 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
元启数宇6 小时前
喷淋AI布点实战:8小时人工布点→20分钟自动出图
人工智能
哈哈,柳暗花明6 小时前
人工智能专业术语详解(H)
人工智能·专业术语
圣殿骑士-Khtangc6 小时前
AI 编程工具 2026 实战横评:Cursor 3 vs Claude Code vs Copilot,开发者选型完全指南
人工智能·copilot
云器科技6 小时前
云器Lakehouse 2026年5月版本发布:拥抱 AI Agent,重塑数据智能开发新范式
人工智能
小鹰-上海鹰谷-电子实验记录本6 小时前
第六届党建引领科创生态座谈会 | 邓光辉博士出席分享AI赋能创新药科研新范式
人工智能·ai·电子实验记录本·药企合规
极客老王说Agent6 小时前
2026电信IDC机房巡检深度报告:人工巡检频次和深度够吗?实在Agent重塑智慧运维新范式
人工智能·ai·chatgpt