话接上篇NLP的学习坑 自然语言处理(NLP)——简介 ,使用HanLP进行分词标注处词性。
HanLP使用简介
HanLP是一系列模型与算法组成的NLP工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
目前,基于深度学习的HanLP 2.0正处于alpha测试阶段。如果是java用户我们搜索的时候进入到官网可能看回浪费一些事件去搞清楚怎么使用,因为2.0目前貌似是python可以使用,而且在测试阶段,并且现在做了线上商业化api调用。
多数文档是围绕2.0的线上api调用的,所以截至目前如果你是使用java那么直接看1.x分支进行使用就好了。github 地址:https://github.com/hankcs/HanLP/tree/1.x。
根据文档说明有两种方式使用HanLP,第一是直接 maven
依赖,第二种就是 下载jar和配置文件
。现在我们来体验下HanLP的使用,let's go
Maven使用
1、我们先建一个简单的maven项目 hanlpdemo
为了方便用户,特提供内置了数据包的Portable版,pom.xml加入依赖,maven reload一下,下载包。
代码语言:javascript复制<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.8.2</version>
</dependency>
2、写一个简单的测试方法
代码语言:javascript复制/**
* HanLP分词
*
* @param inputStr
*/
public static void HanLpSegment(String inputStr) {
//标准分词
List<Term> termList = StandardTokenizer.segment(inputStr);
System.out.println(termList);
//标准分词封装
System.out.println(HanLP.segment(inputStr));
// NLP分词 词性标注和命名实体识别
System.out.println(NLPTokenizer.segment(inputStr));
}
3、run一下看看结果
分词有多种方式:标准分词、NLP分词、索引分词、 N-最短路径分词等等,其它的这里先不测试了。
上面三种方法的分词中,前面两个已经出来结果了,并且标注了词性,而第三个为什么报错(打开失败:data/model/perceptron/large/cws.bin)?
因为Maven的方式零配置,即可使用基本功能(除由字构词、依存句法分析外的全部功能)。如果用户有自定义的需求,可以参考方式二,使用hanlp.properties进行配置(Portable版同样支持hanlp.properties)。
所以NLPTokenizer.segment方法应该是用到了其中的功能,我们使用第二种方式,配置hanlp.properties。既然已经依赖了maven就不用添加jar包了,直接下载data和配置hanlp.properties就行了。
下载jar、data、hanlp.properties
1、下载: data.zip
下载解压后我们将data文件夹放到src/main/resources 下面,放到其它位置也可以,hanlp.properties里面要配置data的路径。
2、下载jar和配置文件:hanlp-release.zip
解压后我们只需要hanlp.properties文件,放到src/main/resources 下面,修改 root=D:/JavaProjects/HanLP/
为 root=./src/main/resources
这是第二种配置使用HanLP的方法,因为我们已经Maven依赖了所以这里就不用添加jar包了,如果不用maven还需要将jar添加进项目引用。
3、再run一下
成功运行起来了,大家可以看到NLPTokenizer.segment方法分词的结果和标准分词的结果不同。“2021年7月15日” 被标注成了时间/t,文档说NLPTokenizer会执行词性标注和命名实体识别,所以被标注成了时间/t命名实体。
再来看下词性标注和命名实体是什么,这个说明更能解释这篇文章而已,看我上篇也有定义,反正定义不是我定义的,神似型不似而已怎么说都有理!
词性标注是什么:
词性是词汇基本的语法属性,也称为词类。词性标注是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程。
命名实体是什么:
命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,其目的是识别语料中人名、地名、组织机构名等命名实体。 命名实体是命名实体识别的研究主体,一般包括三大类(实体类、时间类和数字类)和七小类(人名、地名、机构名、时间、日期、货币和百分比)命名实体。
最后
有了NLP的概念了解,也有了NLP的工具,所以也算是要入门 NLP 了(囧)。目前没有实战的需求,只是个人兴趣学习下,反正时间浪费了也是浪费,希望后面又更多的学习和实践分享!
参考:
1、维基百科
2、HanLp 官网
3、HanLP github