`

如何使用Hanlp加载大字典

阅读更多



 

 

 

问题

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

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

---------------------

作者:ShomyLiu

原文:https://blog.csdn.net/shomy_liu/article/details/49896001

 

 

  • 大小: 87.1 KB
分享到:
评论

相关推荐

    HanLp数据字典(1.7.1)

    在使用HanLP时,开发者需要注意的是,虽然预训练模型能处理大多数常见情况,但在特定领域或针对特定语言风格,可能需要自定义或扩展数据字典。这可能涉及到收集领域内专业词汇、调整分词规则或者训练新的模型。对于...

    下载hanlp.jar包和data数据

    数据文件应该与你的应用代码放在同一目录下,以便HanLP在运行时能够正确加载。 在使用HanLP进行自然语言处理之前,你需要初始化HanLP实例。以下是一个简单的示例代码: ```java import com.hankcs.hanlp.HanLP; ...

    data-for-hanlp.zip

    6. **示例代码**:这些代码示例可以帮助用户快速上手,了解如何使用HanLP库处理特定任务,例如如何加载数据、训练模型、进行预测等。 使用"data-for-hanlp.zip"中的数据,开发者和研究人员可以: - **改进模型性能...

    《自然语言处理入门》第02章 词典分词.pptx

    HanLP的词典加载通常通过IOUtil工具类的loadDictionary方法完成,如示例所示:`IOUtil.loadDictionary("data/dictionary/CoreNatureDictionary.mini.txt")`。 2.3 切分算法 切分算法是将文本中的连续字符序列分割成...

    java中文自动补全

    - 对收集到的词汇进行分词处理,可以使用开源的中文分词库,如HanLP、jieba分词或IK Analyzer等。 - 将分词结果整理成便于搜索的格式,例如使用Trie树或者倒排索引。 2. **实现补全算法**: - **Trie树**:Trie...

    运用在lucene中的中文分词算法源码

    2. 实现细节:在Lucene中,分词器通常会使用动态规划算法,如Aho-Corasick算法,提高查找效率。此外,还会涉及到前缀树(Trie树)或字典树结构,快速定位可能的词汇。 三、jieba分词器 jieba分词器是开源的中文分...

    elasticsearch7.14.0.zip

    4. **IK分词器**:IK是Elasticsearch常用的中文分词插件,支持动态加载字典,能够进行复杂的分词处理。适用于中文文档的检索和分析,提高搜索准确性和效率。 5. **Pinyin插件**:该插件将中文字符转换为拼音,便于...

    ik-analyzer-5.3.1.RELEASE.7z

    - **动态词典加载**:允许在运行时动态加载或更新词典,适应不断变化的词汇环境。 - **插件化设计**:提供了插件接口,用户可以自定义分词策略,增强了软件的扩展性。 - **性能优化**:对算法进行了优化,提高了...

    拼音工具类(汉字转拼音)

    在早期的实现中,可能需要加载一个大的字典文件来存储这些信息,而现在,很多库会将这部分数据编译进类库,提高查询速度。 3. **声母、韵母和声调处理**:汉字的拼音由声母、韵母和声调组成。工具类需要能够识别并...

    自然语言处理之AI深度学习实战视频教程

    - **加载自定义字典**:提高分词准确性。 - **动态调整词频和字典**:根据上下文灵活调整。 **3.3 关键字提取** - **TextRank算法**:基于图的排序算法,用于提取关键词。 - **基于TextRank的关键词提取**:利用...

Global site tag (gtag.js) - Google Analytics