Java实现Word文档内容提取--doc篇

Java实现Word文档内容提取:文本提取与图片保存

一、功能概述

本文介绍一个基于Java的文档处理工具类DocExtractorUtil,实现以下核心功能:
文本提取:从.doc格式的Word文档中提取纯文本内容
图片提取与保存:
从RTF格式文档中提取图片
控制台输出图片信息
本地保存图片文件

二、依赖准备

<!-- Apache POI Word处理 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.17</version>
</dependency>

<!-- 图片处理 -->
<dependency>
    <groupId>javax.imageio</groupId>
    <artifactId>imageio</artifactId>
    <version>1.4</version>
</dependency>

<!-- Spire.Doc(用于RTF解析) -->
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.doc</artifactId>
    <version>3.12.0</version>
</dependency>

三、核心代码解析

  1. 文本提取方法
public static String extractText(InputStream inputStream) {
    // 使用HWPFDocument处理.doc格式
    HWPFDocument doc = new HWPFDocument(inputStream);
    Range range = doc.getRange();
    // 遍历所有段落
    StringBuilder ret = new StringBuilder();
    for (int i = 0; i < numP; ++i) {
        Paragraph p = range.getParagraph(i);
        ret.append(p.text());
    }
    return ret.toString();
}
  1. 图片提取与保存
public static void extractImage(InputStream inputStream) {
    try {
        Document document = new Document();
        document.loadRtf(inputStream);

        Queue<ICompositeObject> nodes = new LinkedList<>();
        nodes.add(document);

        int imageCount = 0;
        while (!nodes.isEmpty()) {
            ICompositeObject node = nodes.poll();
            for (int i = 0; i < node.getChildObjects().getCount(); i++) {
                IDocumentObject child = node.getChildObjects().get(i);
                if (child instanceof ICompositeObject) {
                    nodes.add((ICompositeObject) child);
                } else if (child.getDocumentObjectType() == DocumentObjectType.Picture) {
                    DocPicture picture = (DocPicture) child;
                    
                    // 生成图片文件名
                    String imageType = picture.getPictureType().toString().toLowerCase();
                    String fileName = "image_" + (++imageCount) + "." + imageType;
                    
                    // 保存图片到文件
                    ImageIO.write(picture.getImage(), imageType, 
                        new File("output/" + fileName));
                    
                    // 控制台输出信息
                    System.out.println("发现图片:");
                    System.out.println("├─ 文件名:" + fileName);
                    System.out.println("├─ 尺寸:" + picture.getWidth() + "x" + picture.getHeight());
                    System.out.println("└─ 格式:" + imageType.toUpperCase());
                }
            }
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

四、总结

  1. 扩展建议:
    添加图片尺寸校验
    实现图片格式转换功能
    添加异常重试机制
    支持批量文档处理
    资源消耗提示:处理大尺寸图片时建议增加内存设置
  2. 适用于以下场景:
    文档内容分析
    快速验证文档结构
    图片素材提取
    格式转换预处理
    可以根据实际需求在此基础上继续扩展功能!
### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值