使用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的博客

相关文章
|
1月前
|
存储 自然语言处理 数据库
Python字典操作实现文章敏感词检索
Python字典操作实现文章敏感词检索
|
6月前
|
Python
基于Python读取Excel表格文件数据并转换为字典dict格式
基于Python读取Excel表格文件数据并转换为字典dict格式
基于Python读取Excel表格文件数据并转换为字典dict格式
|
6月前
|
存储 JSON 定位技术
Python提取JSON数据中的键值对并保存为.csv文件
Python提取JSON数据中的键值对并保存为.csv文件
140 1
|
存储 Python
python脚本中的字典
python脚本中的字典
49 1
|
存储 Python
Python读取Excel并将数据转为字典dict变量
本文介绍基于Python语言,将一个Excel表格文件中的数据导入到Python中,并将其通过字典格式来存储的方法~
518 1
Python读取Excel并将数据转为字典dict变量
|
自然语言处理 搜索推荐 Python
jieba分词器(应用及字典的补充)及文档高频词提取实战
jieba分词器(应用及字典的补充)及文档高频词提取实战
Python|获取文件夹下的指定类型文件名并存入表格
Python获取文件夹下的指定类型文件名并存入表格。
|
Python
Python批量提取多目录下多个word文档中的图片
Python批量提取多目录下多个word文档中的图片
206 0
Python批量提取多目录下多个word文档中的图片
|
Python
Python 技术篇-读取文件,将内容保存dict字典中。去掉字符串中的指定字符方法,dict字典的遍历
Python 技术篇-读取文件,将内容保存dict字典中。去掉字符串中的指定字符方法,dict字典的遍历
952 0
|
自然语言处理 算法
HanLP用户自定义词典源码分析详解
HanLP作者在HanLP issue783:上面说:词典不等于分词、分词不等于自然语言处理;推荐使用语料而不是词典去修正统计模型。由于分词算法不能将一些“特定领域”的句子分词正确,于是为了纠正分词结果,把想要的分词结果添加到自定义词库中,但最好使用语料来纠正分词的结果。
1723 0