HanLP的自定义词典使用方式与注意事项介绍

简介: 对于词典,直接加载文本会很慢,所以HanLP对于文本文件做了一些预处理,生成了后缀名为.txt.bin的二进制文件。

 

【环境】python 2.7

 

方法一:使用pyhanlp,具体方法如下:

pip install pyhanlp  # pyhanlp

进入python安装包路径,如

/usr/lib/python2.7/site-packages/pyhanlp/static/

http://hanlp.properties.in改名为备份文件。

 

mv hanlp.properties.in hanlp.properties.in.bak

 

修改hanlp.properties

 

vim hanlp.properties

 

CustomDictionaryPath修改为你自定义的词典路径,如:

 

CustomDictionaryPath=data/dictionary/custom/self_define_dict.txt; 现代汉语补充词库.txt; 全国地名大全.txt; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns; data/dictionary/person/nrf.txt nrf;

 

保存。

 

python脚本,调用pyhanlp示例:

 

from pyhanlp import *

print HanLP.segment("在你想要放弃的时候,想想是什么让你当初坚持走到了这里。总是有人要赢的,那为什么不能是我")

 

运行脚本后,系统会检查配置文件hanlp.properties,读取词库的路径,对于自定义词典,第一次会重新生成二进制文件(以后直接用)。

 

方法二:使用grpc调用hanlp(python调用java包常用手段)

 

方法三:使用hanlp调用jar包(官方文档有说明),自定义词典没设置成功。

 

注意事项:

 

对于词典,直接加载文本会很慢,所以HanLP对于文本文件做了一些预处理,生成了后缀名为.txt.bin的二进制文件。

这些二进制文件相当于缓存,避免了每次加载去读取多个文件。

通过这种txt和bin结合的方式,HanLP一方面方便用户编辑查看词典,另一方面bin方便加载,这种方式可谓是兼二者之长,设计上堪称典范。

 

打开hanlp的data目录data\dictionary\custom,删除所有的.txt.bin文件,这样一来,HanLP下次加载词典时会自动构建.txt.bin,这样一来,你对文本文件所做的更改才会生效。对于HanLP中的字典,每次更改之后,都必须重新生成bin才可以,否则不会生效。

实际上,这种方式不够智能,可以改进为检查文件日期的方式,如果当前目录下的最新的词典文件比bin文件新,那么bin文件失效,需要重新构建bin。

构建bin的过程是比较缓慢的,它需要把所有的相关文本文件中的词语合并到一个里面,每次构建大概需要2min,构建完成之后下次启动就很快了。

 

更改hanlp.properties,添加mine.txt.

 

#自定义词典路径,用;隔开多个自定义词典,空格开头表示在同一个目录,使用“文件名 词性”形式则表示这个词典的词性默认是该词性。优先级递减。

#另外data/dictionary/custom/CustomDictionary.txt是个高质量的词库,请不要删除

CustomDictionaryPath=data/dictionary/custom/mine.txt; CustomDictionary.txt; 现代汉语补充词库.txt; 全国地名大全.txt ns; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns;data/dictionary/person/nrf.txt nrf

 

data/dictionary/custom/目录下新建mine.txt,添加一些词语。比如里面加上”兰陵笑笑生“。

 

随便编一个程序测试一下

 

 List<Term> res = HanLP.segment("兰陵笑笑生笑道:你他娘的真是个天才");

    System.out.println(res);//[兰陵笑笑生/nr, 笑/v, 道/q, :/w, 你/r, 他/r, 娘/n, 的/uj, 真/d, 是/v, 个/q, 天才/n]

    for (String i : HanLP.Config.CustomDictionaryPath) {

        System.out.println(i);

    }

相关文章
|
JSON 前端开发 小程序
uniapp:request 请求出现400错误
uniapp:request 请求出现400错误
1069 0
uniapp:request 请求出现400错误
|
机器学习/深度学习 自然语言处理 算法
Jieba分词的准确率提升:使用paddle模式进行分词(使用百度飞桨深度学习模型进行分词)
jieba中的paddle模式是指使用飞桨(PaddlePaddle)深度学习框架加速分词的一种模式。相对于传统的分词算法,paddle模式采用了深度学习模型,可以获得更高的分词准确度和更快的分词速度。
|
自然语言处理 算法 数据挖掘
数据挖掘实战—使用xgboost实现酒店信息消歧
数据挖掘实战—使用xgboost实现酒店信息消歧
511 0
数据挖掘实战—使用xgboost实现酒店信息消歧
|
存储 缓存 编译器
面向未来:理解ARM处理器的新一代技术(下)
面向未来:理解ARM处理器的新一代技术
|
JavaScript 前端开发 Linux
网页多平台桌面打包工具 electron 和 electron-packager 的使用
网页多平台桌面打包工具 electron 和 electron-packager 的使用
822 0
|
机器学习/深度学习 自然语言处理 计算机视觉
深度学习原理篇 第二章:vision transformer
简要介绍了vision transformer的原理和实现。
583 0
|
网络安全 虚拟化 Windows
VMware创建和使用虚拟网络
VMware创建和使用虚拟网络
560 0
VMware创建和使用虚拟网络
|
安全 Windows
[windows提权] 注册表AlwaysInstallElevated提权
注册表AlwaysInstallElevated是策略设置项,允许低权限用户以system权限运行安装文件,powerup中的Get-RegistryAlwaysInstallElevate模块可用来检查注册表键是否被设置。如果为Ture就证明是以system权限运行的,可提权。
760 0
|
编解码 图形学
为什么次世代建模技术这么火热?游戏建模行业的真实现状
次世代(英文:Next Generation),源自日本语,即下一个时代,未来的时代。传统游戏相比,次世代游戏是把次世代游戏开发技术融入到现代游戏之中,通过增加模型的面数(ZBrush高模)和贴图的数据量(PBR材质)并使用次世代游戏引擎(UE4/Unity)改善游戏的画面效果。
1401 0
为什么次世代建模技术这么火热?游戏建模行业的真实现状
|
应用服务中间件
idea控制台乱码(tomcat日志乱码)的解决办法
idea控制台乱码(tomcat日志乱码)的解决办法
idea控制台乱码(tomcat日志乱码)的解决办法