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

相关文章
|
JSON 数据安全/隐私保护 网络架构
潜力无限:深入探索 gRPC 的奇妙世界
潜力无限:深入探索 gRPC 的奇妙世界
354 1
|
存储 人工智能 Java
【SpringAIAlibaba新手村系列】(3)ChatModel 与 ChatClient 的深度对比
本章深度解析 Spring AI 中 `ChatModel`(底层接口)与 `ChatClient`(高级封装)的本质区别:前者如“手动挡”,精准控制但需写大量样板代码;后者似“智能点餐机”,链式调用、支持系统提示、模板、工具调用等,开发高效。初学者推荐优先使用 `ChatClient`。
172 0
【SpringAIAlibaba新手村系列】(3)ChatModel 与 ChatClient 的深度对比
|
1月前
|
存储 人工智能 搜索推荐
OpenClaw阿里云/本地部署保姆级指南:+21个问题让AI从执行者变专属搭档
大多数人使用OpenClaw的方式,局限于“布置任务→等待结果”的被动循环,让这个强大的AI工具沦为“高级打杂工”。但实际上,每次交互中,OpenClaw都在默默积累关于你的工作节奏、决策偏好、高频痛点等隐性信息——只要善用方法,就能让它从“等指令的执行者”升级为“懂你、主动替你思考”的专属搭档。
412 14
|
12天前
|
数据采集 缓存 监控
OpenClaw 阿里云/本地部署+跨境电商爬虫实战指南|千问API配置+10大场景突破及避坑教程
2026年,OpenClaw(Clawdbot)已成为跨境电商从业者的核心情报工具——通过安装专用Skill(工具模块),它能突破Reddit、Amazon、TikTok等高反爬平台的限制,实现舆情监控、选品分析、数据结构化提取等核心需求。原生OpenClaw仅支持基础HTTP请求,面对JS渲染、IP封锁、懒加载等反爬机制时往往“束手无策”,而专用Skill的接入让其具备“开天眼”的能力,从简单工具升级为跨境电商的“超级情报大脑”。
386 0
|
2月前
|
缓存 NoSQL Java
若依(RuoYi)框架性能核心:Redis 作用与场景全解析
若依(RuoYi)框架中 Redis 的核心作用、具体应用场景和关键配置逻辑,我会从核心作用分类、实战应用场景、关键配置、优化建议四个维度拆解,覆盖单体版和微服务版的通用逻辑,让你清楚 Redis 在若依中 “做什么、怎么做、怎么优化”
384 3
|
7月前
|
人工智能 安全 API
拼多多:通过拼团API发起社交裂变,低成本获取新客
拼多多通过拼团API实现社交裂变,以低至0.5元/人的成本高效获客。其核心在于:拼团模式激发用户分享,API技术保障流畅体验,裂变系数F>1.5时形成指数传播。数学模型显示,新客呈指数增长,获客成本趋近于零。该模式为电商低成本扩张提供范本。(238字)
823 0
|
12月前
|
人工智能 算法 数据挖掘
TG养成类与合成类游戏开发规则技术
在Telegram平台开发养成类与合成类游戏,需兼顾设计、技术、体验与运营。核心玩法上,养成类注重情感联结,合成类强调策略创新;技术实现涵盖游戏引擎、跨平台框架、后端支持及TG API集成。同时,优化用户体验、建设社群、分析数据以调整策略,是确保游戏竞争力的关键。综合这些规则,可打造稳定、有趣且用户粘性高的TG游戏产品。
|
人工智能 Java 程序员
一文彻底搞定C语言中的条件语句if
本文介绍了C语言中的条件语句,如if、if-else和switch,帮助读者理解如何根据不同的条件执行相应的代码块。通过实例讲解了if语句的基本用法及其复杂形式,并提供了编写条件语句的最佳实践建议。君志所向,一往无前!
535 0
一文彻底搞定C语言中的条件语句if
|
人工智能 自然语言处理 搜索推荐
AI辅助教育:个性化学习的新纪元
【10月更文挑战第31天】随着人工智能(AI)技术的发展,教育领域迎来了一场前所未有的变革。AI辅助教育通过智能推荐、语音助手、评估系统和虚拟助教等应用,实现了个性化学习,提升了教学效率。本文探讨了AI如何重塑教育模式,以及个性化学习在新时代教育中的重要性。
|
人工智能 搜索推荐 机器人
人工智能与心理健康:情感支持的新形式
【10月更文挑战第31天】在科技迅速发展的今天,人工智能(AI)已渗透到生活的方方面面,特别是在心理健康领域。本文探讨了AI如何通过智能聊天机器人、情感识别与分析及个性化心理健康计划,为用户提供24小时不间断的情感支持,打破传统服务的时间和地域限制,同时面临隐私保护和伦理等挑战,未来有望与虚拟现实等技术结合,提供更丰富的心理健康服务。