

自然语言处理工具包 HanLP在 Spring Boot中的应用
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.

轻松搞定Java中的分词、文本推荐、关键字提取等自然语言处理问题
本文共 782字,阅读大约需要 2分钟 !
概 述
HanLP 是基于 Java开发的 NLP工具包,由一系列模型与算法组成,目标是普及自然语言处理在生产环境中的应用。而且 HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点,因此十分好上手,本文就结合 Spring Boot来将 HanLP用起来!
注:本文首发于 My Personal Blog:CodeSheep·程序羊 ,欢迎光临 小站
本文内容脑图如下:
下载 HanLP数据和程序
由于 HanLP库将数据与代码分离,因此我们需要分别下载所需数据和 jar包:
- 所需 data数据包下载地址为 data.zip
- 所需 jar包下载地址为 hanlp-release.zip
工程搭建
-
创建一个普通的 Spring Boot工程,不赘述
-
引入 HanLP数据 和 配置
下载完成以后,首先解压 hanlp-release.zip
压缩包,然后将解压出的 HanLP的 jar包引入 Spring Boot工程,然后需要来放置 HanLP所需配置和数据:
-
将解压后
hanlp-release.zip
压缩包中的hanlp.properties
配置文件置于项目的resources
资源目录下 -
然后解压
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目录下的模型、字典等数据来满足特定需求,因此还是十分强大的。
后 记
由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!
- My Personal Blog:CodeSheep 程序羊
- 我的半年技术博客之路
可 长按 或 扫描 下面的 小心心 来订阅 CodeSheep ,获取更多 务实、能看懂、可复现的 原创文 ↓↓↓
最后附上个人联系方式,欢迎大家交流学习:
个人博客:www.codesheep.cn
简 书: https://www.jianshu.com/u/d19536b0189b
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK