30

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

 5 years ago
source link: http://www.codesheep.cn/2018/11/01/springbt-hanlp/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

轻松搞定Java中的分词、文本推荐、关键字提取等自然语言处理问题

3MnAfqy.jpg!web

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

概 述

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

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

本文内容脑图如下:

eq26jmZ.jpg!web

下载 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目录下的模型、字典等数据来满足特定需求,因此还是十分强大的。

后 记

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

长按扫描 下面的 小心心 来订阅 CodeSheep ,获取更多 务实、能看懂、可复现的 原创文 ↓↓↓

by6Nze7.png!web

最后附上个人联系方式,欢迎大家交流学习:

个人博客:www.codesheep.cn

简 书: https://www.jianshu.com/u/d19536b0189b

7zQRryB.jpg!web


Recommend

  • 83
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    自然语言处理 or 量化交易?

  • 79
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    白硕:自然语言处理技术简介

    白硕:自然语言处理技术简介 Original...

  • 62

    作者:查晟 Amazon Applied Scientist最新模型的结果为何难以重现?去年项目的代码为何已经罢工?本该直截了当的基准模型为何如此难做?请看今天的走进科学之,自然语言处理那点事。故事的主人公小 A 是个乐观开朗…

  • 55
    • panchuang.net 4 years ago
    • Cache

    自然语言处理十大应用

    作者|ABHISHEK SHARMA 编译|VK 来源|Analytics Vidhya 介绍 自然语言处理是数据科学领域最热门的课题之一。公司在这一领域投入大量资金进行研究。每个人都在努力了解自然语言处理及其应用,并以此...

  • 10

    自然语言处理-Natural language processing | NLP网络上有海量的文本信息,想要处理这些非结构...

  • 2

    在排查线上异常的过程中,查询日志总是必不可缺的一部分。现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难。工欲善其事,必先利其器。如果此时有一个统一的实时日志分析平台,那可谓是雪中送碳,必定能够提高我们排查线上...

  • 4
    • www.guofei.site 2 years ago
    • Cache

    【NLP】hanlp

    【NLP】hanlp 2021年05月01日 Author: Guofei 文章归类: 2-4-NLP ,文章编号: 341 版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并...

  • 4
    • www.guofei.site 2 years ago
    • Cache

    【HanLP】NER流程

    【HanLP】NER流程 2021年05月15日    Author:Guofei 文章归类: 2-4-NLP    文章编号: 341

  • 14

    1. GFF3toolkit 简介GFF3toolkit是用于处理GFF3格式文件的一个基于python的工具包,功能包括检测GFF3格式错误,修正GFF3格式错误,合并GFF3格式文件,排序G...

  • 2

    Spring 6/Spring Boot 3新特性:优雅的业务异常处理 作者:爱科学的卫斯理 2022-10-26 07:14:25 当你使用Spring Boot(Spring MVC)进行RESTful API开发的时候,你会发现HTTP的状态码很多时候不能足够有效的传递错误...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK