背景
最近做jieba分词,需要导入自定义词库用来切词。但是导入一次自定义词库需要耗时0.6s左右,延迟太长。尤其是需要大批量调用切词时,时间上耗时太久。
前言
之前看到一片文章,通过将自定义词库写入jieba自带词库文件中,然后删除系统中词库的cache缓存文件,重启jieba即可实现自定义分词导入。连接如下:
https://www.jianshu.com/p/dbaa4421b4ce
其实这样做的本质,是为了实现:在程序做准备工作时就完成自定义词库的载入,且后期无需反复载入。
1、存在问题
上述作者采取的方法确实能够在本地解决这样的问题。然而,当代码需要自动化部署在服务器上,是无法修改系统文件配置的,且后期自定义词库需要不断更新。
2、解决办法
通过两层嵌套调用的断点测试(Debug),我发现,结巴是可以在外部将自定义词库导入,经过初始化后,底层被调用的分词模块是可以实现自定义分词的。
也就是“Test嵌套.py”文件调用“test.py”,然后“test.py”再调用真正的分词模块“load_lexicon.py”。
这里,在“Test嵌套.py”就实现了jieba自定义词库的导入,而不需要在“load_lexicon.py”才导入。
结束语
在需要使用jieba自定义词库时,在程序最外层模块中导入词库,初始化后即可。后面反复调用分词模块,并不会反复加载词库文件。且,后期需要更新该文件时,直接追加写入即可。避免了在自动化部署上的麻烦。
注释:
import 模块时,除模块class、def外的代码会被初始化执行一遍(if name == 'main'下的代码不会执行)