-
Notifications
You must be signed in to change notification settings - Fork 10.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
hanlp 能否加入一个远程词典更新的功能 #563
Comments
感谢建议,要reload的话,重新new一个com.hankcs.hanlp.dictionary.CustomDictionary#trie和com.hankcs.hanlp.dictionary.CustomDictionary#dat即可。 reload还可以通过动态加入来实现,com.hankcs.hanlp.dictionary.CustomDictionary#add(java.lang.String),比全部重新加载快太多了。 |
我新增了一个reload接口,欢迎测试。 |
对,我目前就是通过 com.hankcs.hanlp.dictionary.CustomDictionary#trie 重新赋值来完成的 reload,而且我用循环跑了一下,基本没有看见内存泄露,如果 trie 对象没有被其对象引用应该不会出大问题。HotUpdate 可以参考 ik 在 elasticsearch 里面的方式,用一个静态文件服务器,通过 etag 检查远程文件有没有变化,有变化后,就 reload。 |
|
谢谢回复 |
那么最新提交的这个接口应该就是你想要的:dca825b |
谢谢,我去试试 |
还有一个问题,com.hankcs.hanlp.dictionary.CustomDictionary#trie 和 dat 的区别在哪里? |
trie存的是词典文件词条,dat是代码动态插入的词条。前者效率比后者高很多。对热更新来讲,不需要处理dat。 |
对,先删缓存,会自动生成的。 |
这里的热更新的意思是重新加载词典。动态加入的词条不属于任何词典。如果你要清空动态词条,CustomDictionary.trie = new BinTrie<CoreDictionary.Attribute>();即可。 |
恩,好的,我现在就是这么处理的 |
你好,如果程序想要实现一直调用HanLP.segment("XXXX");不中断,这时又必须更新CustomDictionary.txt,如何让segment()在reload()时读取旧.bin,reload()后读取新的.bin? |
抄ik代码,写了个加载远程词的 demo https://github.com/cclient/hanlp-remote-dict |
感谢您对HanLP1.x的支持,我一直为没有时间回复所有issue感到抱歉,希望您提的问题已经解决。或者,您可以从《自然语言处理入门》中找到答案。 时光飞逝,HanLP1.x感谢您的一路相伴。我于东部标准时间2019年12月31日发布了HanLP1.x在上一个十年最后一个版本,代号为最后的武士。此后1.x分支将提供稳定性维护,但不是未来开发的焦点。 值此2020新年之际,我很高兴地宣布,HanLP2.0发布了。HanLP2.0的愿景是下一个十年的前沿NLP技术。为此,HanLP2.0采用TensorFlow2.0实现了最前沿的深度学习模型,通过精心设计的框架支撑下游NLP任务,在海量语料库上取得了最前沿的准确率。作为第一个alpha版本,HanLP 2.0.0a0支持分词、词性标注、命名实体识别、依存句法分析、语义依存分析以及文本分类。而且,这些功能并不仅限中文,而是面向全人类语种设计。HanLP2.0提供许多预训练模型,而终端用户仅需两行代码即可部署,深度学习落地不再困难。更多详情,欢迎观看HanLP2.0的介绍视频,或参与论坛讨论。 展望未来,HanLP2.0将集成1.x时代继承下来的高效率务实风范,同时冲刺前沿研究,做工业界和学术界的两栖战舰,请诸君继续多多指教,谢谢。 |
注意事项
请确认下列注意事项:
版本号
当前最新版本号是:
我使用的版本是:
我的问题
我再使用 elasticsearch-ik的时候,发现这个远程更新的功能非常不错,也很简单,就是通过远程的一个 txt 文件,判断 ETag 是否更新,然后重新 reload 词典,我自己在使用的项目里面已经参考 ik 的机制,写了一个自动更新的功能。
BTW: CustomDictionary 里面能不能加入一个 reload 的功能,我用远程更新的时候需要重新加载这个词典。我本地测试了一个直接把 CustomDictionary.BinTrie = null,运行过了一段时间,好像没有对象过多的内存泄露,但是没有详细测试过。
The text was updated successfully, but these errors were encountered: