如何使用Hanlp加载大字典

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

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,知道有了匹配,但是这样缺陷很明显,解决不了多个字典匹配同一个词的字串的情况,这里我的考察方案是,字典中的同一个字开始的词条映射到同一个文件,这样不会出现字串问题了。

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


 

相关文章
|
2月前
|
存储 数据格式 Python
如何使用 numpy 加载 txt 文件数据?
【8月更文挑战第30天】
42 0
|
4月前
|
数据采集 存储 数据处理
Python 技巧分享:NEF文件的元数据提取
使用 Python 爬虫从网上抓取 NEF 图像文件,通过代理 IP 避免 IP 被封,利用 `requests`, `beautifulsoup4`, `Pillow` 和 `piexif` 库解析和提取元数据。代码示例展示了如何配置亿牛云爬虫代理,下载 NEF 文件并打印其元数据信息。这种方法可应用于各种网络资源的爬取与分析,提高爬虫的稳定性和效率。
Python 技巧分享:NEF文件的元数据提取
|
5月前
|
Python
python如何读取excel文件,并修改内容?
python如何读取excel文件,并修改内容?
204 0
|
5月前
|
Python
基于Python读取Excel表格文件数据并转换为字典dict格式
基于Python读取Excel表格文件数据并转换为字典dict格式
基于Python读取Excel表格文件数据并转换为字典dict格式
|
5月前
|
存储 JSON 定位技术
Python提取JSON数据中的键值对并保存为.csv文件
Python提取JSON数据中的键值对并保存为.csv文件
117 1
|
自然语言处理 搜索推荐 Python
jieba分词器(应用及字典的补充)及文档高频词提取实战
jieba分词器(应用及字典的补充)及文档高频词提取实战
|
存储 自然语言处理 算法
Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)
其实很早以前就想搞一套完备的标签云架构了,迫于没有时间(其实就是懒),一直就没有弄出来完整的代码,说到底标签对于网站来说还是很重要的,它能够对一件事物产生标志性描述,通常都会采用相关性很强的关键字,这样不仅便于检索和分类,同时对网站的内链体系也是有促进作用的。
Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)
|
Python
Python批量提取多目录下多个word文档中的图片
Python批量提取多目录下多个word文档中的图片
200 0
Python批量提取多目录下多个word文档中的图片
对比excel,如何在Python中实现 “自定义文本” 排序!
对比excel,如何在Python中实现 “自定义文本” 排序!
对比excel,如何在Python中实现 “自定义文本” 排序!
|
Python
Python 技术篇 - 查看python库都包含什么方法,查看python模块某个方法的具体用法源码,查看python模块所在的物理位置,查看python库都包含哪些属性
Python 技术篇 - 查看python库都包含什么方法,查看python模块某个方法的具体用法源码,查看python模块所在的物理位置,查看python库都包含哪些属性
1022 0
Python 技术篇 - 查看python库都包含什么方法,查看python模块某个方法的具体用法源码,查看python模块所在的物理位置,查看python库都包含哪些属性