Spring Boot + Apache Tika 实现文档内容解析
一、Tika简介Apache Tika 是由 Apache软件基金会 开发的开源文档处理工具,基于 Java 语言实现,支持自动检测并解析超过1000种文件
格式(如PDF、Office文档、多媒体文件等),提取元数据、结构化文本内容及语言属性,为搜索引擎和内容索引工具提供统一接口。
核心功能
[*]文档类型识别:通过文件头字节、文件名扩展及容器格式深度解析多重检测机制确定文件类型。
[*]元数据提取:获取文件作者、创建时间、修改日期、标题等元数据信息。
[*]文本提取:去除HTML标记并提取纯文本内容,支持流式处理大文件以避免内存溢出。
[*]语言检测:识别文本使用的语言(如中文、英文、法文)。
[*]媒体元数据提取:支持音频/视频文件的分辨率、时长、编码格式等信息的提取。
二、添加 Apache Tika 依赖
<dependency>
<groupId>org.apache.tika</groupId>
tika-core</artifactId>
<version>1.26</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
tika-parsers</artifactId>
<version>1.26</version>
</dependency>三、创建文档解析服务
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.sax.BodyContentHandler;
import org.springframework.stereotype.Service;
import org.apache.tika.metadata.Metadata;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* @ClassName:DocumentParserService
* @Description: 创建文档解析服务
* @Author: songwp
* @Date: 2025/8/5 16:27
*/
@Service
public class DocumentParserService {
/**
* 解析文档内容
* @param file
* @return
*/
public String parseDocument(File file) {
StringBuilder content = new StringBuilder();
try (InputStream stream = new FileInputStream(file)) {
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();
AutoDetectParser parser = new AutoDetectParser();
parser.parse(stream, handler, metadata);
content.append(handler.toString());
} catch (Exception e) {
e.printStackTrace();
content.append("Error: ").append(e.getMessage());
}
return content.toString();
}
}四、创建控制器类
import com.ruoyi.web.controller.tika.DocumentParserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
/**
* @ClassName:DocumentParserController
* @Description: 解析文档的控制器
* @Author: songwp
* @Date: 2025/8/5 16:29
*/
@RestController
@RequestMapping("/api/documents")
public class DocumentParserController {
@Autowired
private DocumentParserService documentParserService;
@PostMapping("/parse")
public ResponseEntity<String> parseDocument(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.badRequest().body("File is empty");
}
try {
// 将上传的文件转换为临时文件
File tempFile = File.createTempFile("document-", ".tmp");
file.transferTo(tempFile);
tempFile.deleteOnExit();
// 调用文档解析服务解析文档内容
String parsedContent = documentParserService.parseDocument(tempFile);
return ResponseEntity.ok(parsedContent);
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(500).body("Error: " + e.getMessage());
}
}
}五、配置和运行
配置 Apache Tika 数据文件
确保你的项目根目录有一个 tessdata 文件夹,其中包含 Apache Tika 的数据文件。
(1) Apache Tika 官方网站 下载合适的语言数据文件。
(2) 云盘数据下载:https://pan.baidu.com/s/13oPR2r7qOE6lt6SgbpWOQA 提取码: uaaw 六、测试与验证
(1)以下是准备的文档内容截图
(2) tika文档内容解析如下:
七、注意事项
1、 文件格式支持
确保上传的文件是 Apache Tika 支持的格式,如 PDF、Word 文档、Excel 表格等。
2、优化解析性能
针对大文件和复杂格式的文档,可能需要优化解析性能。可以考虑使用异步处理、文件流处理等技术来提升解析速度和稳定性。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]