通过正则批量提取PDF中文本信息

通过正则批量提取PDF中文本信息

复制代码
public static void main(String[] args) throws IOException {
        // 这是预设的正则,可以通过预设不同的正则提取不同内容(电话号码、邮箱等等)
        String[] options = {"([0-9]{6}.+,00)", "待设定(正则)", "待设定(正则)"};
        // 选项弹窗
        int selectedOption = JOptionPane.showOptionDialog(null, "请选择一个选项", "选项框", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);

        // 获取选项值
        String selectedValue = "";
        if (selectedOption != JOptionPane.CLOSED_OPTION) {
            selectedValue = options[selectedOption];
        } else {
            // 如果没有选择,则可以手动输入正则
            selectedValue = JOptionPane.showInputDialog(null, "请输入您的文本:","([0-9]{6}.+,00)");
        }

        // 通过文件选择器选择pdf文件
        JFileChooser chooser = new JFileChooser();
        // 过滤pdf文件
        FileNameExtensionFilter filter = new FileNameExtensionFilter("PDF Files", "pdf");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            // 根据选择的文件获取pdf文本
            File selectedFile = chooser.getSelectedFile();
            PDDocument document = PDDocument.load(new File(selectedFile.getPath()));
            PDFTextStripper stripper = new PDFTextStripper();
            String text = stripper.getText(document);

            // 通过正则从文本中获取内容
            Pattern pattern = Pattern.compile(selectedValue);
            Matcher matcher = pattern.matcher(text);
            String fileName = new File(selectedFile.getPath()).getName();

            // 将提取的内容写入文件
            String outputFileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".txt";
            FileWriter writer = new FileWriter(outputFileName);
            while (matcher.find()) {
                String group = matcher.group();
                writer.write(group);
                writer.write("\n");
            }
            writer.close();
            document.close();
        } else {
            // TODO 换成提示框
            System.out.println("File selection cancelled.");
        }
    }
相关推荐
tedcloud1233 小时前
OpenLogi 怎么搭建?用 Rust 打造一个轻量的 Logitech 外设管理工具
linux·运维·服务器·开发语言·后端·rust·开源
霸道流氓气质3 小时前
Spring AI 技术细节:VectorStore 多库统一抽象
java·人工智能·spring
今天AI了吗3 小时前
Codex 配置自定义 AI API 完整指南:从零到一接入你的专属模型
java·人工智能·python·数据分析·embedding
Tanjia_kiki3 小时前
谷歌浏览器中F12编辑并重发请求
开发语言·前端·javascript
程序猿编码3 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
学长毕业设计4 小时前
基于SpringBoot的健康食谱管理系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
珍珠先生4 小时前
P10 · 缺 MySQL 驱动 jar:ClassNotFoundException: com.mysql.cj.jdbc.Driver
java
pnoker4 小时前
从工业软件到 AI 智能体:工业 AIoT 技术路线的系统梳理
java·人工智能·物联网·microsoft·开源·工业互联网
传奇开心果编程4 小时前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust
秋田君4 小时前
Qt_QMediaPlayer类与QMediaPlaylist类
开发语言·qt