Spring AI 12 · DocumentReader 读取多种格式

发布时间:2026/8/26 1:25:48

Spring AI 12 · DocumentReader 读取多种格式
12 · DocumentReader 读取多种格式 学完能做什么用 Spring AI 的 DocumentReader 把 TXT/PDF/Markdown/JSON 等真实文件读成 Document 列表为分块和灌库做准备。⏱️ 预计耗时40 分钟含动手 依赖前置第 09 章Document 难度一句话DocumentReader 是 ETL 的第一步「读」负责把各种格式的文件统一读成ListDocument屏蔽格式差异。1. ETL 全景Reader 在哪一环RAG 灌库其实是一条 ETL 流水线Reader读── Splitter切块── 富化 metadata ── Embedding ── VectorStore灌 ↑本章 第13章 第14章 第7章 第8/9章本章只管第一环把文件读进来。2. 各格式对应的 Reader 与依赖Spring AI 为不同格式提供了不同 Reader多数需额外加依赖格式Reader依赖 artifactTXT / 纯文本TextReader核心自带PDFPagePdfDocumentReader/ParagraphPdfDocumentReaderspring-ai-pdf-document-readerMarkdownMarkdownDocumentReaderspring-ai-markdown-document-readerJSONJsonReader核心自带Word/HTML 等TikaDocumentReaderspring-ai-tika-document-reader 拿不准格式或格式很杂时TikaDocumentReader是万金油底层用 Apache Tika支持几十种格式。3. TextReader读纯文本ComponentclassTxtIngest{Value(classpath:/docs/faq.txt)privateResourcefaq;ListDocumentread(){TextReaderreadernewTextReader(faq);reader.getCustomMetadata().put(source,faq.txt);// 给读出的 doc 打标returnreader.get();// 返回 ListDocument}}4. PDF按页 or 按段落// 依赖spring-ai-pdf-document-readerValue(classpath:/docs/manual.pdf)privateResourcepdf;ListDocumentreadPdf(){// 按页读每页一个 Documentmetadata 自动带 page 页码PagePdfDocumentReaderreadernewPagePdfDocumentReader(pdf);returnreader.get();}PagePdfDocumentReader每页一个 Document自动带页码 metadata利于溯源第 21 章。ParagraphPdfDocumentReader按 PDF 书签/段落结构切结构化更好但依赖 PDF 本身有目录结构。5. Markdown保留结构// 依赖spring-ai-markdown-document-readerValue(classpath:/docs/guide.md)privateResourcemd;ListDocumentreadMd(){MarkdownDocumentReaderConfigconfigMarkdownDocumentReaderConfig.builder().withHorizontalRuleCreateDocument(true)// 遇到 --- 分文档.withIncludeCodeBlock(false)// 是否把代码块并入.withIncludeBlockquote(false).build();returnnewMarkdownDocumentReader(md,config).get();}Markdown 的标题层级是天然的切分线索配合下一章的分块效果更好。6. Tika万能格式Word/PPT/HTML…// 依赖spring-ai-tika-document-readerValue(classpath:/docs/policy.docx)privateResourcedocx;ListDocumentreadAny(){returnnewTikaDocumentReader(docx).get();}7. 读取后先检查再进入下一环读出来别急着灌先看看质量避免「垃圾进垃圾出」ListDocumentdocsreader.get();System.out.println(读到 docs.size() 个文档);docs.stream().limit(2).forEach(d-{System.out.println(内容片段: d.getText().substring(0,Math.min(80,d.getText().length())));System.out.println(metadata: d.getMetadata());});常见问题PDF 扫描件是图片读出空文本需 OCR、编码乱码、页眉页脚噪音等。8. 常见坑现象原因 / 处理PDF 读出来是空的扫描版图片 PDF需先 OCR中文乱码文件编码问题TextReader 可指定 charset缺依赖ClassNotFound对应 Reader 的 artifact 没加一个大 PDF 读成一个巨长 Document正常交给下一章分块处理9. 一句话总结DocumentReader 是 ETL 的「读」TXT/JSON 核心自带PDF/Markdown 各有专用 Reader格式杂就用万能的 Tika读出ListDocument后先检查质量再交给分块。➡️ 下一章13-TextSplitter文档分块.md把读进来的长文档切成大小合适的 chunk这是检索质量的关键一环。

相关新闻

AI文本水印技术解析:从Claude隐形水印到Unwatermark破解

AI文本水印技术解析:从Claude隐形水印到Unwatermark破解

2026/8/26 1:25:48

最近在AI安全圈里发生了一件挺有意思的事:一个名为“Unwatermark”的GitHub项目,号称能破解Anthropic公司为Claude AI模型生成的文本添加的“隐形水印”,短短五天就狂揽了超过11k的Star。这波热度不仅让开发者们开始重新审视AI生成内容&#…

具身智能精密装配赛上位机开发:TCP通讯、协议解析与实时调度实战指南

具身智能精密装配赛上位机开发:TCP通讯、协议解析与实时调度实战指南

2026/8/26 0:05:45

1. 先搞清楚“具身智能精密装配赛”到底要解决什么问题看到“具身智能精密装配赛”这个标题,很多人的第一反应可能是“这比赛要用机器人做装配”,然后就开始琢磨机械臂、视觉算法或者强化学习。但结合“线下赛区需要智能体上位机教学及tcp通讯”这个关键…

缓存穿透、击穿与雪崩:原理、区别与Spring Boot+Redis实战解决方案

缓存穿透、击穿与雪崩:原理、区别与Spring Boot+Redis实战解决方案

2026/8/26 0:05:45

大家好,我是专注于后端技术分享的博主。在构建高并发系统时,缓存是提升性能、保护数据库的利器。然而,如果使用不当,缓存也可能成为系统稳定性的“阿喀琉斯之踵”。缓存穿透、击穿和雪崩是三个高频出现且极易混淆的故障场景&#…

手写string类:C++内存管理与异常安全实战

手写string类:C++内存管理与异常安全实战

2026/8/26 3:26:02

1. 为什么我们要亲手“造轮子”:从string类模拟切入C底层思维训练在C初学者的代码里,std::string几乎是呼吸般自然的存在——s "hello"、s.substr(0,5)、s.find("world"),一行调用就搞定所有字符串操作。但当你某天调试…

从原理到实战:单片机电容触摸按键设计与抗干扰全解析

从原理到实战:单片机电容触摸按键设计与抗干扰全解析

2026/8/26 3:26:02

1. 项目概述:从机械按键到电容触摸的进化 在嵌入式开发领域,人机交互是绕不开的一环。回想我早期做项目,清一色用的是机械按键,按下去“咔哒”一声,虽然反馈明确,但问题也不少:寿命有限、容易进…

嵌入式电容触摸按键原理与实现:从RC充放电到软件滤波全解析

嵌入式电容触摸按键原理与实现:从RC充放电到软件滤波全解析

2026/8/26 3:26:02

1. 从机械到指尖:电容触摸按键为何成为嵌入式交互新宠干了十几年嵌入式开发,从最早的机械按键、薄膜按键一路用过来,再到后来的电阻屏、电容屏,交互方式的演进我算是亲历者。现在但凡是个消费电子产品,不带个触摸功能好…

水上运动鞋行业调研:从功能装备到时尚单品的市场演变与核心技术解析

水上运动鞋行业调研:从功能装备到时尚单品的市场演变与核心技术解析

2026/8/26 3:26:02

1. 项目概述:为什么需要一份“水上运动鞋”的深度调研报告?如果你是一位运动品牌的产品经理、一个户外装备店的采购,或者是一位正在寻找新赛道的投资人,当“水上运动鞋”这个词频繁出现在你的视野里时,你可能会感到一丝…

Python爬虫实战:王者荣耀皮肤图片自动化下载与反爬策略详解

Python爬虫实战:王者荣耀皮肤图片自动化下载与反爬策略详解

2026/8/26 3:26:02

1. 项目缘起与核心价值最近在整理一个游戏素材库,需要用到《王者荣耀》的英雄和皮肤图片。手动去官网一张张保存?那工作量简直不敢想,一百多个英雄,每个英雄少则一两套、多则七八套皮肤,加起来近千张图片,纯…

安信可ESP32-S/SL/SU模组深度对比:芯片、天线、功耗与选型指南

安信可ESP32-S/SL/SU模组深度对比:芯片、天线、功耗与选型指南

2026/8/26 3:16:01

1. 项目概述:为何要深究这三款模组?如果你正在为物联网项目选型,尤其是涉及Wi-Fi和蓝牙连接的小型设备,安信可(Ai-Thinker)的ESP32系列模组大概率在你的候选清单里。但当你打开产品列表,看到ESP…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/26 1:50:39

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/26 1:49:16

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

2026/8/26 0:05:45

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

Hermes接入团队协作后,我推翻了三个效率假设

Hermes接入团队协作后,我推翻了三个效率假设

2026/8/26 0:05:45

聊《Hermes真能提效吗?先看流程里最慢的那一步》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要团队把 Hermes 接进项目三个月后,交付速度没有提升反而慢了。复盘后发现,最先…

免费AI大模型调教指南:打造专属网文写作助手

免费AI大模型调教指南:打造专属网文写作助手

2026/8/26 0:05:45

1. 先搞清楚“AI小说扩展模式”到底能帮你做什么如果你是一个刚开始写网文、或者卡在L3级别以下的作者,最头疼的可能是情节推进不下去、人物对话干瘪,或者世界观设定不够丰满。自己对着空白文档硬憋,效率很低。这时候,一个能理解你…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…