本文介绍如何通过apache tika从文档(pdf、doc、docx、txt)中 提取特征数据,比如文档中有身份证、姓名等信息。【全部是经本人实际测试过的功能】

1、需引入相关pom依赖

<!-- apache tika 包,用于解析pdf、word文本文档-->        <dependency>            <groupId>org.apache.tika</groupId>            <artifactId>tika-core</artifactId>            <version>2.8.0</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.apache.tika/tika-parsers-standard-package -->        <dependency>            <groupId>org.apache.tika</groupId>            <artifactId>tika-parsers-standard-package</artifactId>            <version>2.8.0</version>        </dependency>        <!-- tika包中缺少该xmlbeans依赖,不引入的话,tika解析word会报错 -->        <dependency>            <groupId>org.apache.xmlbeans</groupId>            <artifactId>xmlbeans</artifactId>            <version>5.1.1</version>        </dependency>

2、编写相关代码

package org.example.wordcontent;
import org.apache.tika.Tika;import org.apache.tika.exception.TikaException;
import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.regex.Matcher;import java.util.regex.Pattern;
/** * 通过apache tika从 pdf、doc、docx、txt中提取数据 * 核心依赖jar【tika-core 2.8.0、tika-parsers-standard-package 2.8.0(解析word时,需另外外依赖xmlbeans 5.1.1)】 * 假定文档中的内容具有下列属性: * [授权人(签字):张三 *  身份证号码: 322025199902256056 ] *  待提取的内容为张三  和 322025199902256056。张三和322025199902256056的值会变 */public class TikaExtrator {    public static void main(String[] args) {
        try {            //// 替换为实际的PDF文件路径 测试例子: 如 测试.xlsx.            InputStream input = TikaExtrator.class.getClassLoader().getResourceAsStream("综合信息查询授权书测试.docx");
            String text = extractTextFromFile(input);            System.out.println("text: " + text);            String name = extractName(text);            String idNumber = extractIdNumber(text);            System.out.println("授权人姓名: " + name);            System.out.println("身份证号码: " + idNumber);        } catch (IOException e) {            e.printStackTrace();        }    }
    /**     *     * @param inputStream     * @return     * @throws IOException     */    private static String extractTextFromFile(InputStream inputStream) throws IOException {        Tika tika = new Tika();        try {            return tika.parseToString(inputStream);        } catch (TikaException e) {            throw new RuntimeException(e);        }    }
    private static String extractName(String text) {        Pattern pattern = Pattern.compile("授权人(签字)[::]([\\u4e00-\\u9fa5]+)");        Matcher matcher = pattern.matcher(text);        if (matcher.find()) {            return matcher.group(1);        }        return "";    }
    private static String extractIdNumber(String text) {        Pattern pattern = Pattern.compile("身份证号码[::](\\d{18}|\\d{15})");        Matcher matcher = pattern.matcher(text);        if (matcher.find()) {            return matcher.group(1);        }        return "";    }}

3、执行效果

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐