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);

    }

相关文章
|
机器学习/深度学习 存储 自然语言处理
Jieba分词模式详解、词库的添加与删除、自定义词库失败的处理
Jieba(结巴)是一个中文分词第三方库,它可以帮助我们将一段中文文本分成一个个独立的词语。Jieba具有以下特点: 简单易用:Jieba提供了简洁的API接口,易于使用和扩展。可以快速地实现中文分词功能。 高效准确:Jieba采用了基于前缀词典和动态规划算法的分词方法,能够高效准确地处理各种中文文本。 支持多种分词模式:Jieba提供了三种分词模式:精确模式、全模式和搜索引擎模式,可以根据不同的应用场景选择合适的模式。
Jieba分词模式详解、词库的添加与删除、自定义词库失败的处理
|
缓存 自然语言处理
elasticsearch hanlp插件自定义词典配置
简要讲述elasticsearch hanlp 插件自定义词典配置
elasticsearch hanlp插件自定义词典配置
|
自然语言处理 开发工具 网络架构
自定义词库|学习笔记
快速学习自定义词库。
212 0
自定义词库|学习笔记
|
开发者
自定义词库 | 学习笔记
快速学习自定义词库
自定义词库 | 学习笔记
|
自然语言处理 Windows
ik分词器配置自定义词典+追加写入文件
ik分词器配置自定义词典+追加写入文件
ik分词器配置自定义词典+追加写入文件
|
存储 JSON 自然语言处理
更新阿里云ES实例的同义词词典常见问题
更新阿里云ES实例的同义词词典时,经常会遇到各种问题,下面对请求语法还有具体含义,以及一些具体限制做了具体的说明,还有一些常见的问题。
458 0
|
自然语言处理 算法
HanLP用户自定义词典源码分析详解
HanLP作者在HanLP issue783:上面说:词典不等于分词、分词不等于自然语言处理;推荐使用语料而不是词典去修正统计模型。由于分词算法不能将一些“特定领域”的句子分词正确,于是为了纠正分词结果,把想要的分词结果添加到自定义词库中,但最好使用语料来纠正分词的结果。
1727 0
|
自然语言处理
hanlp添加自定义字典的步骤介绍
本篇分享一个hanlp添加自定义字典的方法,供大家参考!总共分为两步:第一步:将自定义的字典放到custom目录下,然后删除CustomDicionary.txt.bin,因为分词的时候会读这个文件。
921 0
|
自然语言处理 应用服务中间件 nginx
hanlp 加载远程词库示例
说明 ·目前的实现方式是以远程词库的内容重新构建CustomDictionary.trie,demo主要是为了实现同步远程词库,对性能暂不作考虑,对性能要求要以CustomDictionary.dat为基础实现 按hanlp作者述 trie后期可能会取消   目前CustomDictionary使用DAT储存词典文件中的词语,用BinTrie储存动态加入的词语,前者性能高,后者性能低 之所以保留动态增删功能,一方面是历史遗留特性,另一方面是调试用;来可能会去掉动态增删特性。
1218 0
|
自然语言处理
在Hanlp词典手动添加未登录词的方式介绍
在使用Hanlp词典进行分词的时候,会出现分词不准的情况,原因是内置词典中并没有收录当前这个词,也就是我们所说的未登录词,只要把这个词加入到内置词典中就可以解决类似问题,如何操作呢,
1143 0