自然语言处理工具包 HanLP在 Spring Boot中的应用

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
简介:

全新的 Mac Mini

本文共 782字,阅读大约需要 2分钟 !


概 述

HanLP 是基于 Java开发的 NLP工具包,由一系列模型与算法组成,目标是普及自然语言处理在生产环境中的应用。而且 HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点,因此十分好上手,本文就结合 Spring Boot来将 HanLP用起来!

注: 本文首发于 My Personal Blog:CodeSheep·程序羊,欢迎光临 小站

本文内容脑图如下:

傲游浏览器截图20181031233757.jpg


下载 HanLP数据和程序

由于 HanLP库将数据与代码分离,因此我们需要分别下载所需数据和 jar包:


工程搭建

  • 创建一个普通的 Spring Boot工程,不赘述
  • 引入 HanLP数据 和 配置

下载完成以后,首先解压 hanlp-release.zip压缩包,然后将解压出的 HanLP的 jar包引入 Spring Boot工程,然后需要来放置 HanLP所需配置和数据:

  1. 将解压后 hanlp-release.zip压缩包中的 hanlp.properties配置文件置于项目的 resources资源目录下
  2. 然后解压 data.zip压缩包,将解压出的 data目录同样至于 resources目录下( data 中的数据包很重要,是 HanLP工作所需的词典和模型 )

创建 IO适配器

HanLP 提供了 IO适配器,用户可以实现其提供的 com.hankcs.hanlp.corpus.io.IIOAdapter 接口以在不同的平台(HDFS、Redis等)上运行HanLP,默认的 IO适配器 IOAdapter = com.hankcs.hanlp.corpus.io.FileIOAdapter 是基于普通文件系统的。

接下来我们重写一下 IOAdapter类,使用读写静态资源文件的方法来读取HanLP所需的词典和模型数据( 即resources目录下刚放置的 data目录 )

public class ResourceFileIoAdapter implements IIOAdapter {
    @Override
    public InputStream open(String path) throws IOException {
        ClassPathResource resource = new ClassPathResource( path );
        InputStream is = new FileInputStream( resource.getFile() );
        return is;
    }

    @Override
    public OutputStream create(String path) throws IOException {
        ClassPathResource resource = new ClassPathResource( path );
        OutputStream os = new FileOutputStream( resource.getFile() );
        return os;
    }
}

然后我们配置一下 HanLP的配置文件hanlp.properties,有两处需要改为以下配置:

root=   // 我们不再需要这种指定data目录的方式
IOAdapter=cn.codesheep.springbt_hanlp_userdefine.config.ResourceFileIoAdapter // 指定自定义的IOAdapter

好,现在项目就可以工作了,我们接下来写几个测试用例测试体验一把 !


实验测试

随便写几个例子来感受一番:

  • 分词功能
@Test
public void testSegment() {
    System.out.println( HanLP.segment("www.codesheep.cn是一个技术博客!") );
}

分词结果如下:

[www/nx, ./w, codesheep/nx, ./w, cn/nx, 是/vshi, 一个/mq, 技术/n, 博客/n, !/w]

每个词段后的 /nx/w之类的是 HanLP定义的词性,可以去看 HanLP的接口来获取详情

  • 文本推荐
@Test
public void testSuggest() {
    Suggester suggester = new Suggester();
    String[] titleArray =
            (
                    "威廉王子发表演说 呼吁保护野生动物\n" +
                            "《时代》年度人物最终入围名单出炉 普京马云入选\n" +
                            "“黑格比”横扫菲:菲吸取“海燕”经验及早疏散\n" +
                            "日本保密法将正式生效 日媒指其损害国民知情权\n" +
                            "人工智能如今是非常火热的一门技术”"
            ).split("\\n");
    for (String title : titleArray)
    {
        suggester.addSentence(title);
    }

    System.out.println(suggester.suggest("机器学习", 1));   // 语义
    System.out.println(suggester.suggest("危机公共", 1));   // 字符
    System.out.println(suggester.suggest("mayun", 1));     // 拼音
}

三个关键字的语句推荐结果为:

机器学习  →  [人工智能如今是非常火热的一门技术”]
危机公共  →  [威廉王子发表演说 呼吁保护野生动物]
mayun     →  [《时代》年度人物最终入围名单出炉 普京马云入选]
  • 关键字提取
@Test
public void testKeyExtract() {
    String content = "苹果公司(Apple Inc. )是美国一家高科技公司。由史蒂夫·乔布斯、斯蒂夫·沃兹尼亚克和罗·韦恩(Ron Wayne)等人于1976年4月1日创立," +
            "并命名为美国苹果电脑公司(Apple Computer Inc. ),2007年1月9日更名为苹果公司,总部位于加利福尼亚州的库比蒂诺。";
    List<String> keywordList = HanLP.extractKeyword(content, 5);
    System.out.println(keywordList);
}

提取结果为:

[公司, 苹果, 美国, Inc, Apple]

体验一番我们发现其自带的模型、字典等数据给出的实验效果已经是非常不错了,而且用户还可以自定义或修改 data目录下的模型、字典等数据来满足特定需求,因此还是十分强大的。


后 记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!



目录
相关文章
|
12天前
|
机器学习/深度学习 数据采集 自然语言处理
深度学习在自然语言处理中的应用与挑战
本文探讨了深度学习技术在自然语言处理(NLP)领域的应用,包括机器翻译、情感分析和文本生成等方面。同时,讨论了数据质量、模型复杂性和伦理问题等挑战,并提出了未来的研究方向和解决方案。通过综合分析,本文旨在为NLP领域的研究人员和从业者提供有价值的参考。
|
3天前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用
【9月更文挑战第17天】本文主要介绍了AI技术在自然语言处理(NLP)领域的应用,包括文本分类、情感分析、机器翻译和语音识别等方面。通过实例展示了AI技术如何帮助解决NLP中的挑战性问题,并讨论了未来发展趋势。
|
1月前
|
安全 Java 网络安全
当网络安全成为数字生活的守护者:Spring Security,为您的应用筑起坚不可摧的防线
【9月更文挑战第2天】在数字化时代,网络安全至关重要。本文通过在线银行应用案例,详细介绍了Spring Security这一Java核心安全框架的核心功能及其配置方法。从身份验证、授权控制到防御常见攻击,Spring Security提供了全面的解决方案,确保应用安全。通过示例代码展示了如何配置`WebSecurityConfigurerAdapter`及`HttpSecurity`,帮助开发者有效保护应用免受安全威胁。
56 4
|
6天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
21 2
|
14天前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
36 3
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI技术在自然语言处理中的应用
【9月更文挑战第22天】本文将探讨AI技术在自然语言处理(NLP)领域的应用,包括文本挖掘、情感分析、机器翻译等方面。我们将通过实例和代码示例,展示如何使用Python和相关库实现这些功能。
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在自然语言处理中的应用与未来展望
本文探讨了深度学习技术在自然语言处理(NLP)领域的应用,重点分析了神经网络模型如循环神经网络(RNN)、长短期记忆网络(LSTM)和Transformer等在文本生成、语义理解及情感分析等任务中的卓越表现。通过具体案例展示了这些模型如何有效解决传统方法难以处理的问题,并讨论了当前面临的挑战及未来可能的发展方向,为进一步研究提供了新的视角和思路。
|
21天前
|
Kubernetes Cloud Native Java
当 Quarkus 遇上 Spring Boot,谁才是现代云原生应用的终极之选?究竟哪款能助你的应用傲视群雄?
Quarkus 和 Spring Boot 均为构建现代云原生应用的热门框架,旨在简化开发流程并提升性能。Spring Boot 依托庞大的 Spring 生态系统,提供开箱即用的体验,适合快速搭建应用。Quarkus 由红帽发起,专为 GraalVM 和 HotSpot 设计,强调性能优化和资源消耗最小化,是云原生环境的理想选择。
19 3
|
27天前
|
机器学习/深度学习 数据采集 人工智能
AI技术在自然语言处理中的应用与挑战
【9月更文挑战第12天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将介绍NLP的基本概念、主要任务和应用场景,并分析当前AI技术在NLP中的局限性和未来发展趋势。通过实际案例和代码示例,我们将展示AI技术如何帮助解决NLP问题,并探讨如何克服现有挑战以实现更高效的自然语言处理系统。