使用Hanlp加载大字典
问题
因为需要加载一个 近 1G 的字典到Hanlp中,一开始使用了CustomDictionay.add() 方法来一条条的加载,果然到了中间,维护DoubleArraTre 的成本太高,添加一个节点,都会很长时间,本来时间长一点没有关系,只要训练出.bin 的文件,第二次加载就会很快,然而作为以空间换时间的DAT结构,内存消耗很大,预料之内的出现了
out of memory: heap size
的问题。 后来尝试直接加载了1G 的字典,显然更不行。
思路
阅读了Hanlp的 部分源码,也请教了原作者一部分问题, 就打算从源码入手。初步想法大概是将原始字典
split 成多份,然后分别将多份的小字典 训练成 多个小的.bin 文件,再完整的加载到内存中,基于的原则则是:加载两个10M的字典的消耗比一个20M的要小。
然后又优化了一部分,现在加载一个大概1G的字典,占内存约3g+ ,已经可以使用了。
大概流程
修改 CustomDictionary.java 设置一个 hashmap 或者 一个 list 来存储所有的小Dat
将所有的dat加载完,这里就不再区分主副字典了。
修改Segment.java里面的combineByCustomDictionary 函数,源码中只有一个dat, 这里我们需要选择我们容器中其中某一个dat作为要匹配使用,之前使用的方案是,遍历所有的dat,知道有了匹配,但是这样缺陷很明显,解决不了多个字典匹配同一个词的字串的情况,这里我的考察方案是,字典中的同一个字开始的词条映射到同一个文件,这样不会出现字串问题了。
上面是个大概的修改,可以参考。
文章来源于ShomyLiu的博客

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
这 10 个 MySQL 经典错误,遇到过才是老司机!
今天就给大家列举 MySQL 数据库中,最经典的十大错误案例,并附有处理问题的解决思路和方法,希望能给刚入行,或数据库爱好者一些帮助。 今后再遇到任何报错,我们都可以很淡定地去处理。学习任何一门技术的同时,其实就是自我修炼的过程。沉下心,尝试去拥抱数据的世界! Top 1:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原 mysql> show variables like '%max_connection%'; | Variable_name | Value | mysql> set global max_connections=1;Query OK, 0 rows affected (0.00 sec) max_connections | 151 | [root@node
- 下一篇
NewLife.Redis 100亿小数据使用经验技巧分享
NewLife.Redis 100亿数据使用经验技巧分享 本文包括Redis入门,基础知识,NewLife.Redis使用,Redis使用技巧,100亿小数据使用经验技巧分享 介绍 NewLife.Redis主要作者及经验介绍来源:大石头 源码: https://github.com/NewLifeX/NewLife.Redis Nuget:NewLife.Redis NewLife.Redis是一个Redis客户端组件,以高性能处理大数据实时计算为目标。 Redis协议基础实现Redis/RedisClient位于X组件,包含基础字符串操作。完整实现由独立开源项目NewLife.Redis提供。NewLife.Redis为扩展实现,主要增加列表结构、哈希结构、队列等高级功能。 采取连接池加同步阻塞架构,具有超低延迟(200~600us)以及超高吞吐量的特点。在物流行业大数据实时计算中广泛应有,经过日均100亿次调用量验证。 特性 在ZTO大数据实时计算广泛应用,200多个Redis实例稳定工作一年多,每天处理近1亿包裹数据,日均调用量80亿次 低延迟,Get/Set操作平均耗时200...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装Docker,最新的服务器搭配容器使用