自然语言解决工具包 HanLP在 Spring Boot中的应用
来源:CodeSheep     阅读:677
雨古源码
发布于 2018-11-01 23:16
查看主页
全新的 Mac Mini

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


概 述

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

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

本文内容脑图如下:

傲游浏览器截图20181031233757.jpg

下载 HanLP数据和程序

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


工程搭建

下载完成以后,首先解压 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

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


试验测试

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

@Testpublic 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的接口来获取介绍

@Testpublic 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     →  [《时代》年度人物最终入围名单出炉 普京马云当选]
@Testpublic 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目录下的模型、字典等数据来满足特定需求,因而还是十分强大的。


后 记

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



免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
前台代码规范总结
ClickHouse(二)centos 部署
「幕客技术」如何动态增加apache的proxy板块
你确定?你真的懂Nginx与PHP的交互?!
解Bug之路-记一次中间件导致的慢SQL排查过程
首页
搜索
订单
购物车
我的