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

如何在程序中重新加载自定义的词典 #689

Open
kjdongzh opened this Issue Nov 23, 2017 · 1 comment

Comments

Projects
None yet
2 participants
@kjdongzh

kjdongzh commented Nov 23, 2017

注意事项

请确认下列注意事项:

  • 我已仔细阅读下列文档,都没有找到答案:
  • 我已经通过Googleissue区检索功能搜索了我的问题,也没有找到答案。
  • 我明白开源社区是出于兴趣爱好聚集起来的自由社区,不承担任何责任或义务。我会礼貌发言,向每一个帮助我的人表示感谢。
  • 我在此括号内输入x打钩,代表上述事项确认完毕。

版本号

当前最新版本号是:
我使用的版本是:hanlp-1.3.2-portable.jar 、 hanlp-lucene-plugin-1.1.2.jar

实际场景

一个web容器中有两个webapp,一个是webappA,另一个是solr,solr使用hanlp为中文分词器,并配置了用户词典(即customDictionaryPath属性),webappA有一个在线编辑词典的功能,希望编辑完字典,solr能够看到效果而不需要重启tomcat容器。

解决思路

在hanlp solr插件中的HanLPTokenizerFactory开启一个守护线程,每隔一段时间去检查字典的校检码,如果发生变化就删掉.bin缓存文件,并重新加载字典。

我的问题

1、我目前在CustomDictionary添加了如下一个静态方法,但是这样会把所有的自定义词典重新加载一遍,有没有只加载某个文件的方法呢

  public static void reloadDic(){
    	trie = null;
    	dat = new DoubleArrayTrie<CoreDictionary.Attribute>();
    	loadMainDictionary(path[0]);
    }

2、执行CustomDictionary.insert()方法后,为什么新词典已经产生效果,但dat.size()没有发生变化

@kjdongzh kjdongzh changed the title from 如何在jvm中重新加载自定义的词典 to 如何在程序中重新加载自定义的词典 Nov 23, 2017

@hankcs

This comment has been minimized.

Owner

hankcs commented Nov 25, 2017

  1. 没有只加载某个文件的方法,为了效率考虑,从文件加载的所有词语构造为一棵dat。
  2. 动态插入的词语储存在trie里面。

@hankcs hankcs added the 提问 label Nov 25, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment