We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
请确认下列注意事项:
当前最新版本号是:1.7.3 我使用的版本是:hanlp-1.7.2
在变更自定义停用词典stopwords.txt文件后,在不重新启动程序的情况下,无法自动加载更新,亦无手动更新的操作。 即使手动删除stopwords.txt.bin缓存文件, 在之后的操作中(如:提取关键词HanLP.extractKeyword( )),也不会触发stopwords.txt的重新载入。
stopwords.txt
stopwords.txt.bin
HanLP.extractKeyword( )
从 issue:1136 中了解到 自定义词典 有reload()的方法 可以手动 重新载入 自定义词典
reload()
(不适用此issue)
被追加到stopwords.txt文件中的词,不再出现在“提取关键词”的结果中
与 “变更stopwords.txt文件”之前的结果一样
目前为了实现“手动重新载入stopword”之目的, 查看了CoreStopWordDictionary类的静态代码块,仿照着
CoreStopWordDictionary
在需要 reload 停用词典 的地方,如下操作:
try { // 反射: // 1. 获取到CoreStopWordDictionary中非public的dictionary成员变量 // 2. 再变更其 可请问权限 Field dictionaryField = CoreStopWordDictionary.class.getDeclaredField("dictionary"); dictionaryFiled.setAccessible(true); // 3. 重新创建一个StopWordDictionary对象,调用其 save()方法,并替换旧的StopWordDictionary对象 StopWordDictionary dictionary = new StopWordDictionary(HanLP.Config.CoreStopWordDictionaryPath); DataOutputStream out = new DataOutputStream(new BufferedOutputStream(IOUtil.newOutputStream(HanLP.Config.CoreStopWordDictionaryPath + Predefine.BIN_EXT))); dictionary.save(out); dictionaryFiled.set(dictionaryField, dictionary); out.close(); } catch (Exception e) { // }
显然,这样做十分不优雅。希望能在官方的版本能加入“手动重新载入 停用词典”的功能。
相关 issue: #28 、#32
动画演示:https://i.loli.net/2019/04/23/5cbf2741654a3.gif 说明:如图的Demo,循环地提取一段文本的关键词。(来源:百度百科的github词条)
初始:提取到“代码”一词;
将其添加到stopword.txt中,Ctrl+S保存,重启程序,未生效。 删除stopword.txt.bin之后,重启程序,已生效。(结论①:如同Readme.md所言,“如果你修改了任何词典,只有删除缓存才能生效”)
stopword.txt
stopword.txt.bin
Readme.md
再 添加“概念”一词,不重启程序,输出仍有此词, 删除了 3个*.txt.bin文件(未重启程序),输出仍有此词。(结论②:stopword 不能热更新 加载)
*.txt.bin
The text was updated successfully, but these errors were encountered:
停用词典支持热更新:#1158
45a4f04
c74ef77
感谢反馈,已经修复,请参考上面的commit。 如果还有问题,欢迎重开issue。
Sorry, something went wrong.
停用词典支持热更新:fix #1158
c82e946
No branches or pull requests
注意事项
请确认下列注意事项:
版本号
当前最新版本号是:1.7.3
我使用的版本是:hanlp-1.7.2
我的问题
在变更自定义停用词典
stopwords.txt
文件后,在不重新启动程序的情况下,无法自动加载更新,亦无手动更新的操作。即使手动删除
stopwords.txt.bin
缓存文件,在之后的操作中(如:提取关键词
HanLP.extractKeyword( )
),也不会触发stopwords.txt的重新载入。从 issue:1136 中了解到 自定义词典 有
reload()
的方法 可以手动 重新载入 自定义词典复现问题
步骤
(不适用此issue)
触发代码
(不适用此issue)
期望输出
被追加到
stopwords.txt
文件中的词,不再出现在“提取关键词”的结果中实际输出
与 “变更
stopwords.txt
文件”之前的结果一样其他信息
目前为了实现“手动重新载入stopword”之目的,
查看了
CoreStopWordDictionary
类的静态代码块,仿照着在需要 reload 停用词典 的地方,如下操作:
显然,这样做十分不优雅。希望能在官方的版本能加入“手动重新载入 停用词典”的功能。
相关 issue: #28 、#32
动画演示:https://i.loli.net/2019/04/23/5cbf2741654a3.gif
说明:如图的Demo,循环地提取一段文本的关键词。(来源:百度百科的github词条)
初始:提取到“代码”一词;
将其添加到
stopword.txt
中,Ctrl+S保存,重启程序,未生效。删除
stopword.txt.bin
之后,重启程序,已生效。(结论①:如同Readme.md
所言,“如果你修改了任何词典,只有删除缓存才能生效”)再 添加“概念”一词,不重启程序,输出仍有此词,
删除了 3个
*.txt.bin
文件(未重启程序),输出仍有此词。(结论②:stopword 不能热更新 加载)The text was updated successfully, but these errors were encountered: