文章目录
- 如何阅读本文?
- Hanlp用户自定义词典引用简介
- 操作步骤
- 环境创建
- 编辑词典文件
- 将用户自定义词典路径加入配置文件
- 删除缓存文件
如何阅读本文?
- 首先我们对Hanlp用户词典进行简介,推荐首先阅读链接文章,它是本文的第一来源;
- 环境配置方面分为几个步骤,每个需要动手操作的步骤都用黑体加粗显示,依据这些步骤你完全可以将用户自定义词典创建完成,但是我们建议将分析部分仔细看一看,加深理解;
- 对每一个步骤出现的问题我们都进行了解释并提供了解决方案,如果你是为了解决问题来到的本文,可以使用
Ctrl+F
查找你想解决的问题,很有可能就在文章中; - 仅供参考,感谢来到这里─=≡Σ(((つ•̀ω•́)つ;
Hanlp用户自定义词典引用简介
考完六级的我回来了~
在之前的文章中,提到了Hanlp用户自定义词典的作用和详细信息,传送门:Hanlp之理解用户自定义词典(java版本)那篇文章的源代码分析还没写
光说不练假把式,今天我们一步一步来配置一个自定义词典并在分词中使用它;(Java版本)
操作步骤
环境创建
- java项目:在IDE中创建一个java项目,将hanlp-jar和hanlp-sources-jar引入到项目(Build Path),当我们第一次使用时将sources包attach到项目,就可以查看源代码了,否则是无法查看的;同时将Hanlp的配置文件导入到classpath(放入项目文件的bin目录下即可,我们一会要着重操作这个配置文件);
- Hanlp文件:我们在第一步已经导入了两个包,同时将配置文件加入到了classpath,我们还需要在Hanlp根目录下任意位置创建一个词典文件,我们这里以txt格式为例。
问题1:我的词典文件应该创建在哪里呢?任意位置都可以吗?
答:我们希望你将文件创建在Hanlp配置文件声明的根目录下,你如果仔细观察配置文件的话会发现Hanlp
的地址规则,原文如下:
#本配置文件中的路径的根目录,根目录+其他路径=完整路径(支持相对路径,请参考:https://github.com/hankcs/HanLP/pull/254)
#Windows用户请注意,路径分隔符统一使用/
紧接着一行就是你配置的根目录:root
所以,最好将文件创建在根目录下。
同时注意,windows OS用户的分隔符请使用 "/",不要转义。
至此,我们就将环境创建好了。
编辑词典文件
我们知道了词典内部数据的组织方式,我们也要按照这个方式来进行加载,在应用时我们经常通过流操作来写入数据,由于这次演示的数据量比较小,我们直接输入。
- 进入编辑器,我们编辑词典文件:我创建了一个名称为 我的词典.txt 的词典文件,在里面,我定义了一个
开斯卡
名词和一个子库啊
动词,显然,这两个在现有语料库中没有任何意义的词是不太可能分到一起的,当我们需要将这两个词分到一起时就可以将他们加入词典;
问题2:开斯卡和子库啊两个词在分词时一定会分到一起吗?
答:还是不一定,为什么“还是”,请看链接文章解释。这两个词在分词时会有很大概率在一起,但不是一定
,当你充分了解后果后,可以使用 Segment #enableCustomDictionaryForcing 强制分词
问题3:我应该如何编辑文件?格式是什么?
答:输入单词,同时加入词性和出现频率,词性和频率不是必须项,省略会使用默认值,默认值我们会在稍后
介绍;词性表请见 http://www.hankcs.com/nlp/part-of-speech-tagging.html#h2-8
单词之间请使用制表符或者空格隔开(这意味着单词之间不允许出现空格);
- 保存文件,注意,一定要将文件保存为UTF-8编码,Hanlp使用UTF-8编码;
将用户自定义词典路径加入配置文件
- 路径配置规则
(1)#本配置文件中的路径的根目录,根目录+其他路径=完整路径(支持相对路径,请参考:https://github.com/hankcs/HanLP/pull/254)
#Windows用户请注意,路径分隔符统一使用/
(2)#自定义词典路径,用;隔开多个自定义词典,空格开头表示在同一个目录,使用“文件名 词性”形式则表示这个词典的词性默认是该词性。优先级递减。 - 操作:
首先确定根目录,根目录是data目录的父目录;
然后将词典移动至父目录下的任意一个位置(创建时就在请忽略此步);
在CustomDictionaryPath后追加字典位置,值为绝对路径-root路径,比如我的词典文件路径是F:\java学习\Hanlp\data\dictionary\custom\我的词典.txt
,而root是F:\java学习\Hanlp\
,所以我应该在最后写入data\dictionary\custom\我的词典.txt
;
如果创建的词典文件和已有的词典在一个目录,在上一目录分号后输入一个空格,直接追加文件名称即可
删除缓存文件
在配置完毕后,我们一定要删除之前加载字典时产生的缓存文件,比如下图中的CustomDictionary.txt.bin
文件就是上次产生的缓存文件,我们将他删除;
问题4 我们为什么要删除缓存文件?
答:Hanlp首次加载词典/模型会发生一个自动缓存的过程,自动缓存的目的是为了加速词典载入速度,在下次
载入时,缓存的词典文件会带来毫秒级的加载速度。
如果我们不删除这个文件,Hanlp会直接使用缓存进行分词,不会应用新的改变,手动删除后,再次加载会
重新缓存,这是我们的自定义词典就会加载到缓存了。
注意:字典删除加入词语时不用重新创建缓存。