博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用Hanlp加载大字典
阅读量:6711 次
发布时间:2019-06-25

本文共 707 字,大约阅读时间需要 2 分钟。

415578359ed9c1ebe9ad30c3d7aaf12afb7764ee 

 

问题

因为需要加载一个 近 1G 的字典到Hanlp中,一开始使用了CustomDictionay.add() 方法来一条条的加载,果然到了中间,维护DoubleArraTre 的成本太高,添加一个节点,都会很长时间,本来时间长一点没有关系,只要训练出.bin 的文件,第二次加载就会很快,然而作为以空间换时间的DAT结构,内存消耗很大,预料之内的出现了

1   out of memory: heap size

的问题。后来尝试直接加载了1G 的字典,显然更不行。

思路

阅读了Hanlp的部分源码,也请教了原作者一部分问题,就打算从源码入手。初步想法大概是将原始字典 split 成多份,然后分别将多份的小字典 训练成 多个小的.bin 文件,再完整的加载到内存中,基于的原则则是:加载两个10M的字典的消耗比一个20M的要小。

然后又优化了一部分,现在加载一个大概1G的字典,占内存约3g+ ,已经可以使用了。

大概流程

1 修改 CustomDictionary.java 设置一个 hashmap 或者 一个 list 来存储所有的小Dat

2 将所有的dat加载完,这里就不再区分主副字典了。

3 修改Segment.java里面的combineByCustomDictionary 函数,源码中只有一个dat, 这里我们需要选择我们容器中其中某一个dat作为要匹配使用,之前使用的方案是,遍历所有的dat,知道有了匹配,但是这样缺陷很明显,解决不了多个字典匹配同一个词的字串的情况,这里我的考察方案是,字典中的同一个字开始的词条映射到同一个文件,这样不会出现字串问题了。

以上就是个大概的修改,可以参考。

 

转载地址:http://uzolo.baihongyu.com/

你可能感兴趣的文章
中国发布5G研发测试结果 关键技术已通过验证
查看>>
Qt Creator 运行s60 Emulator
查看>>
从供给侧改革看中国集成电路产业投资热
查看>>
测试之道--阿里巴巴八年测试专家倾情奉献
查看>>
大数据助推新型智库建设
查看>>
新加坡欲重组通信和媒体管制机构
查看>>
微信公众号最新数据解读,三分之一停更成僵尸号
查看>>
软件自动化测试成功公式
查看>>
少走弯路,中小企业OA选型攻略
查看>>
万能的小苏打,知道的人太少了,赶紧收藏
查看>>
从MWC 2017看懂英特尔5G朋友圈
查看>>
Facebook 的移动端 A/B 测试框架
查看>>
《交互式程序设计 第2版》一2.3.4 运算符
查看>>
CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍
查看>>
论模式在领域驱动设计中的重要性
查看>>
一个创业公司的API网关落地实践
查看>>
国内需求疲弱 铅酸蓄电池新消费税将铅价承压
查看>>
Qt之网络编程
查看>>
《Adobe Acrobat X中文版经典教程》—第2章2.1节打开PDF文件
查看>>
FSF 活动人士呼吁就 DRM 致电 WWW 之父
查看>>