Document Parser 使用指南
Spring AI Alibaba 提供了丰富的 Document Parser 扩展实现,支持解析各种文档格式。本文档将详细介绍 Document Parser 的使用方法,并列出所有支持的扩展实现。
目录
概述
Document Parser 是 Spring AI Alibaba 中用于解析不同格式文档的核心接口。与 Document Reader 不同,Parser 专注于从输入流中解析文档内容,通常与 Document Reader 配合使用,将原始文档转换为 Spring AI 的 Document 对象。
Spring AI Alibaba 扩展了该接口,提供了多种格式的解析实现,包括:
- 文档格式(PDF、Markdown、YAML、HTML 等)
- 办公文档(通过 Tika 支持多种 Office 格式)
- 多模态内容(图像 OCR、语音转文字)
- 特殊格式(BibTeX、PDF 表格等)
- 批量处理(目录解析)
详细使用说明
Tika Document Parser 示例
TikaDocumentParser 使用 Apache Tika 库自动检测并解析各种文档格式。Tika 是一个强大的文档解析工具,支持超过 1000 种文件格式,包括:
- PDF:提取文本、元数据等
- Microsoft Office:Word (
.doc,.docx)、PowerPoint (.ppt,.pptx)、Excel (.xls,.xlsx) - HTML/XML:解析网页和 XML 文件
- 图片:提取图像元数据或通过 OCR 解析图片中的文本
- 文本文件:纯文本、Markdown 等
- 其他格式:邮件格式(EML、MSG)、RTF、OpenDocument 等
有关支持的格式的完整列表,请参阅 Apache Tika 文档。
依赖配置
使用 Maven 添加依赖:
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-document-parser-tika</artifactId>
<version>${version}</version>
</dependency>
基本使用
示例 1:简单解析
import com.alibaba.cloud.ai.parser.tika.TikaDocumentParser;
import com.alibaba.cloud.ai.document.DocumentParser;
import org.springframework.ai.document.Document;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.io.InputStream;
import java.util.List;
@Component
public class DocumentParsingService {
public List<Document> parseDocument(String filePath) {
// 创建 Tika Parser
DocumentParser parser = new TikaDocumentParser();
// 读取文件输入流
Resource resource = new ClassPathResource(filePath);
try (InputStream inputStream = resource.getInputStream()) {
// 解析文档
return parser.parse(inputStream);
}
}
}
示例 2:自定义文本格式化
import com.alibaba.cloud.ai.parser.tika.TikaDocumentParser;
import org.springframework.ai.reader.ExtractedTextFormatter;
public class FormattedDocumentParser {
public List<Document> parseWithFormatting(InputStream inputStream) {
// 创建自定义的文本格式化器
ExtractedTextFormatter formatter = ExtractedTextFormatter.builder()
.withNumberOfTopTextLinesToDelete(0)
.withNumberOfBottomTextLinesToDelete(0)
.build();
// 使用格式化 器创建 Parser
TikaDocumentParser parser = new TikaDocumentParser(formatter);
return parser.parse(inputStream);
}
}