You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Tika 2.4.1正确提取DOCX文件的文本与图片?

Tika 2.4.1版本正确提取DOCX文本与图片的解决方案

直接使用OOXMLParser解析

DOCX属于OOXML格式,绕过AutoDetector直接调用专门的OOXMLParser,能确保正确解析文本和嵌入图片:

// 初始化OOXML解析器
Parser parser = new OOXMLParser();
ParseContext context = new ParseContext();

// 配置嵌入资源提取逻辑,仅处理图片
context.set(EmbeddedDocumentExtractor.class, new EmbeddedDocumentExtractor() {
    @Override
    public boolean shouldParseEmbedded(Metadata metadata) {
        return metadata.get(Metadata.CONTENT_TYPE).startsWith("image/");
    }

    @Override
    public void parseEmbedded(InputStream inputStream, ContentHandler contentHandler, Metadata metadata, boolean b) throws IOException, SAXException, TikaException {
        // 示例:将图片保存到本地
        String imageName = metadata.get(Metadata.RESOURCE_NAME_KEY);
        Files.copy(inputStream, Paths.get("./extracted_images/" + imageName), StandardCopyOption.REPLACE_EXISTING);
    }
});

// 执行解析
try (InputStream stream = new FileInputStream("target.docx")) {
    Metadata metadata = new Metadata();
    BodyContentHandler contentHandler = new BodyContentHandler();
    parser.parse(stream, contentHandler, metadata, context);
    // 获取提取的文本内容
    String docText = contentHandler.toString();
}

调整AutoDetector配置,确保识别DOCX格式

通过TikaConfig加载完整的格式检测规则,让AutoDetector正确识别DOCX的媒体类型:

// 加载默认Tika配置,包含所有格式检测规则
TikaConfig config = TikaConfig.getDefaultConfig();
Detector detector = config.getDetector();
Parser parser = config.getParser();

ParseContext context = new ParseContext();
context.set(Parser.class, parser);

try (InputStream stream = new FileInputStream("target.docx")) {
    Metadata metadata = new Metadata();
    // 检测文件格式,此时应识别为application/vnd.openxmlformats-officedocument.wordprocessingml.document
    MediaType mediaType = detector.detect(stream, metadata);
    
    // 解析文件,提取文本和图片
    BodyContentHandler contentHandler = new BodyContentHandler();
    parser.parse(stream, contentHandler, metadata, context);
}

检查依赖完整性

确保项目依赖包含Tika标准解析器包,避免因缺失OOXML解析模块导致识别错误:
Maven依赖配置:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers-standard-package</artifactId>
    <version>2.4.1</version>
</dependency>

补充说明

Tika 2.x对Detector和Parser的结构做了调整,DOCX本质是zip压缩包,若依赖不全或配置不当,AutoDetector会优先识别为application/zip并使用PackageParser,上述方法可强制使用正确的OOXML解析器,实现文本与图片的正常提取。

内容的提问来源于stack exchange,提问作者Mikael Gu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:54:20