自然语言处理预训练模型简历抽取(中文)服务 Java SDK示例

简介: 自然语言处理(Natural Language Processing,简称NLP),是为各类企业及开发者提供的用于文本分析及挖掘的核心工具,旨在帮助用户高效的处理文本,已经广泛应用在电商、文娱、司法、公安、金融、医疗、电力等行业客户的多项业务中,取得了良好的效果。可用于搭建内容搜索、内容推荐、舆情识别及分析、文本结构化、对话机器人等智能产品。NLP自学习平台提供了一些预训练的特定领域模型服务。例如:商品评价解析服务、新闻层次分类服务、中文简历抽取、英文简历抽取等。本文将使用Java SDK演示简历抽取(中文)服务以及响应返回json字符串中unicode编码转为中文字符的调用以供参考。

使用前提:服务开通与资源包购买

操作步骤:

1.添加pom依赖

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.5.14</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-nlp-automl</artifactId>
        <version>0.0.8</version>
    </dependency>

2.Code Sample

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.nlp_automl.model.v20191111.RunPreTrainServiceRequest;
import com.aliyuncs.nlp_automl.model.v20191111.RunPreTrainServiceResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;


//  自然语言处理预训练模型 简历抽取服务

public class JianLi {

    public static void main(String[] args) throws ClientException {

        DefaultProfile defaultProfile = DefaultProfile.getProfile("cn-hangzhou","XXXXXXXXXX","XXXXXXXXXX");
        IAcsClient client = new DefaultAcsClient(defaultProfile);
        String content = "张某 ID:61111111\n" +
                "186123333333\u0003\n" +
                "zhang@126.com\n" +
                "男|29 岁 (1990/07/27)|现居住南京-玄武区|8年工作经验\n" +
                "职位: 软件测试工程师";
        RunPreTrainServiceRequest request = new RunPreTrainServiceRequest();
        request.setServiceName("ResumeExtractorZH");
        request.setPredictContent(content);
        RunPreTrainServiceResponse response = client.getAcsResponse(request);
        System.out.println(response.getPredictResult());

       /* Gson gson=new GsonBuilder().disableHtmlEscaping().create();
        System.out.println(gson.toJson(response.getPredictResult()));*/

       String s=decodeUnicode(response.getPredictResult());
        System.out.println(s);

    }
    public static String decodeUnicode(String theString) {
        char aChar;
        int len = theString.length();
        StringBuffer outBuffer = new StringBuffer(len);
        for (int x = 0; x < len;) {
            aChar = theString.charAt(x++);
            if (aChar == '\\') {
                aChar = theString.charAt(x++);
                if (aChar == 'u') {
                    // Read the xxxx
                    int value = 0;
                    for (int i = 0; i < 4; i++) {
                        aChar = theString.charAt(x++);
                        switch (aChar) {
                            case '0':
                            case '1':
                            case '2':
                            case '3':
                            case '4':
                            case '5':
                            case '6':
                            case '7':
                            case '8':
                            case '9':
                                value = (value << 4) + aChar - '0';
                                break;
                            case 'a':
                            case 'b':
                            case 'c':
                            case 'd':
                            case 'e':
                            case 'f':
                                value = (value << 4) + 10 + aChar - 'a';
                                break;
                            case 'A':
                            case 'B':
                            case 'C':
                            case 'D':
                            case 'E':
                            case 'F':
                                value = (value << 4) + 10 + aChar - 'A';
                                break;
                            default:
                                throw new IllegalArgumentException(
                                        "Malformed   \\uxxxx   encoding.");
                        }
                    }
                    outBuffer.append((char) value);
                } else {
                    if (aChar == 't')
                        aChar = '\t';
                    else if (aChar == 'r')
                        aChar = '\r';
                    else if (aChar == 'n')
                        aChar = '\n';
                    else if (aChar == 'f')
                        aChar = '\f';
                    outBuffer.append(aChar);
                }
            } else
                outBuffer.append(aChar);
        }
        return outBuffer.toString();
    }
}

3.测试结果

{"result": [{"tags": [{"class": "\u59d3\u540d", "source": "rule", "span": "\u5f20\u67d0"}], "id": 0, "sent_offsets": 0, "sentence": "\u5f20\u67d0 ID:61111111"}, {"tags": [{"start": 0, "end": 12, "conf": 0, "span": "186123333333", "source": "model", "class": "\u624b\u673a\u53f7"}], "id": 0, "sent_offsets": 1, "sentence": "186123333333\u0003"}, {"tags": [{"class": "\u7535\u5b50\u90ae\u7bb1", "source": "rule", "span": "zhang@126.com"}], "id": 0, "sent_offsets": 2, "sentence": "zhang@126.com"}, {"tags": [{"start": 8, "end": 18, "conf": 0, "span": "1990/07/27", "source": "model", "class": "\u51fa\u751f\u65e5\u671f"}, {"class": "\u6027\u522b", "source": "rule", "span": "\u7537"}], "id": 0, "sent_offsets": 3, "sentence": "\u7537|29 \u5c81 (1990/07/27)|\u73b0\u5c45\u4f4f\u5357\u4eac-\u7384\u6b66\u533a|8\u5e74\u5de5\u4f5c\u7ecf\u9a8c"}, {"tags": [{"start": 4, "end": 11, "conf": 0, "span": "\u8f6f\u4ef6\u6d4b\u8bd5\u5de5\u7a0b\u5e08", "source": "model", "class": "\u5c97\u4f4d\u540d\u79f0"}], "id": 0, "sent_offsets": 4, "sentence": "\u804c\u4f4d\uff1a \u8f6f\u4ef6\u6d4b\u8bd5\u5de5\u7a0b\u5e08"}], "message": "", "time": 22, "ret_code": 0}
{"result": [{"tags": [{"class": "姓名", "source": "rule", "span": "张某"}], "id": 0, "sent_offsets": 0, "sentence": "张某 ID:61111111"}, {"tags": [{"start": 0, "end": 12, "conf": 0, "span": "186123333333", "source": "model", "class": "手机号"}], "id": 0, "sent_offsets": 1, "sentence": "186123333333"}, {"tags": [{"class": "电子邮箱", "source": "rule", "span": "zhang@126.com"}], "id": 0, "sent_offsets": 2, "sentence": "zhang@126.com"}, {"tags": [{"start": 8, "end": 18, "conf": 0, "span": "1990/07/27", "source": "model", "class": "出生日期"}, {"class": "性别", "source": "rule", "span": "男"}], "id": 0, "sent_offsets": 3, "sentence": "男|29 岁 (1990/07/27)|现居住南京-玄武区|8年工作经验"}, {"tags": [{"start": 4, "end": 11, "conf": 0, "span": "软件测试工程师", "source": "model", "class": "岗位名称"}], "id": 0, "sent_offsets": 4, "sentence": "职位: 软件测试工程师"}], "message": "", "time": 22, "ret_code": 0}

更多参考

响应返回JSON数据时出现的unicode编码问题
预训练模型使用教程
简历抽取(中文)服务

目录
相关文章
|
7月前
|
Java 大数据 Go
从混沌到秩序:Java共享内存模型如何通过显式约束驯服并发?
并发编程旨在混乱中建立秩序。本文对比Java共享内存模型与Golang消息传递模型,剖析显式同步与隐式因果的哲学差异,揭示happens-before等机制如何保障内存可见性与数据一致性,展现两大范式的深层分野。(238字)
226 4
|
9月前
|
缓存 前端开发 Java
Java类加载机制与双亲委派模型
本文深入解析Java类加载机制,涵盖类加载过程、类加载器、双亲委派模型、自定义类加载器及实战应用,帮助开发者理解JVM核心原理与实际运用。
|
12月前
|
数据采集 机器学习/深度学习 自然语言处理
NLP助力非结构化文本抽取:实体关系提取实战
本文介绍了一套基于微博热帖的中文非结构化文本分析系统,通过爬虫代理采集数据,结合NLP技术实现实体识别、关系抽取及情感分析。核心技术包括爬虫模块、请求配置、页面采集和中文NLP处理,最终将数据结构化并保存为CSV文件或生成图谱。代码示例从基础正则规则到高级深度学习模型(如BERT-BiLSTM-CRF)逐步演进,适合初学者与进阶用户调试与扩展,展现了中文NLP在实际场景中的应用价值。
772 3
NLP助力非结构化文本抽取:实体关系提取实战
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
9月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在生物信息学基因功能预测中的优化与应用(223)
本文探讨了Java大数据与机器学习模型在生物信息学中基因功能预测的优化与应用。通过高效的数据处理能力和智能算法,提升基因功能预测的准确性与效率,助力医学与农业发展。
|
9月前
|
机器学习/深度学习 搜索推荐 数据可视化
Java 大视界 -- Java 大数据机器学习模型在电商用户流失预测与留存策略制定中的应用(217)
本文探讨 Java 大数据与机器学习在电商用户流失预测与留存策略中的应用。通过构建高精度预测模型与动态分层策略,助力企业提前识别流失用户、精准触达,实现用户留存率与商业价值双提升,为电商应对用户流失提供技术新思路。
|
9月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
9月前
|
机器学习/深度学习 自然语言处理 算法
Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的对抗训练与鲁棒性提升(205)
本文探讨Java大数据与机器学习在自然语言处理中的对抗训练与鲁棒性提升,分析对抗攻击原理,结合Java技术构建对抗样本、优化训练策略,并通过智能客服等案例展示实际应用效果。
|
11月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
435 1
|
10月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。