本文共 782 字,阅读大约需要 2 分钟 !
HanLP 是基于 Java 开发的 NLP 工具包,由一系列模型与算法组成,目标是普及自然语言处理在生产环境中的应用。而且 HanLP 具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点,因此十分好上手,本文就结合 Spring Boot 来将 HanLP 用起来!
注: 本文首发于 My Personal Blog:CodeSheep·程序羊,欢迎光临 小站
本文内容脑图如下:
由于 HanLP 库将数据与代码分离,因此我们需要分别下载所需数据和 jar 包:
创建一个普通的 Spring Boot 工程,不赘述
引入 HanLP 数据 和 配置
下载完成以后,首先解压 hanlp-release.zip
压缩包,然后将解压出的 HanLP 的 jar 包引入 Spring Boot 工程,然后需要来放置 HanLP 所需配置和数据:
将解压后 hanlp-release.zip
压缩包中的 hanlp.properties
配置文件置于项目的 resources
资源目录下
然后解压 data.zip
压缩包,将解压出的 data 目录同样至于 resources
目录下( data 中的数据包很重要,是 HanLP 工作所需的词典和模型 )
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 目录下的模型、字典等数据来满足特定需求,因此还是十分强大的。
由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.