jieba分词单例模式及linux权限不够情况下tmp_dir自定义
在linux环境下,没有root权限的情况下,有时会碰到如下问题:
Building prefix dict from the default dictionary ... Loading model from cache /tmp/jieba.cache Dumping model to file cache /tmp/jieba.cache Dump cache file failed. Traceback (most recent call last):File "/home/work/anaconda3/envs/py27/lib/python2.7/site-packages/jieba/__init__.py", line 153, in initialize_replace_file(fpath, cache_file) OSError: [Errno 1] Operation not permitted
这是因为jieba默认情况下在/tmp下存储缓存文件,然而不是root用户,权限不够。解决办法是修改默认缓存文件的目录,把缓存文件放在用户的目录下面。 jieba文档提到了tmp_dir和cache_file可以改,所以我们查看了下源码
/home/work/anaconda3/envs/py27/lib/python2.7/site-packages/jieba/__init__.py,文件52行-66行如下:
class Tokenizer(object):def __init__(self, dictionary=DEFAULT_DICT):self.lock = threading.RLock()if dictionary == DEFAULT_DICT:self.dictionary = dictionaryelse:self.dictionary = _get_abs_path(dictionary)self.FREQ = {}self.total = 0self.user_word_tag_tab = {}self.initialized = Falseself.tmp_dir = None# self.tmp_dir = '/'self.cache_file = None
修改源码,在64行self.tmp_dir中可以设置自定义缓存路径。
另外一种方式是在代码中修改,以下是jieba单例模式demo
1 class Singleton(object): 2 """ 3 Jieba Utils Class 4 """ 5 _instance = None 6 7 def __new__(cls, *args, **kwargs): 8 if not cls._instance: 9 cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs) 10 return cls._instance 11 12 13 class JiebaUtil(Singleton): 14 """ 15 jiebautil 工具包 16 """ 17 _jieba_instance = None 18 19 def get_instance(self): 20 """ 21 get the global jieba instance 22 """ 23 if self._jieba_instance: 24 return self._jieba_instance 25 print 'initialize...' 26 obj = jieba.Tokenizer() 27 obj.tmp_dir = dirpath 28 obj.load_userdict(user_dict_path) 29 obj.initialize() 30 self._jieba_instance = obj 31 return obj 32 33 34 if __name__ == '__main__': 35 36 one = JiebaUtil() 37 two = JiebaUtil() 38 39 print one == two 40 41 tkn = one.get_instance() 42 tkn2 = one.get_instance() 43 print tkn == tkn2 44 45 print id(one), id(two) 46 47 print id(tkn), id(tkn2)
在27行中可以设置自定义的他们tmp_dir缓存路径。
参考:
http://funhacks.net/2017/01/17/singleton/
https://blog.csdn.net/sijiaqi11/article/details/78601258
转载于:https://www.cnblogs.com/shizhh/p/10599931.html
jieba分词单例模式及linux权限不够情况下tmp_dir自定义相关推荐
- SAP 没有QM02权限的情况下如何为一个质量通知单单据上传附件?
SAP 没有QM02权限的情况下如何为一个质量通知单单据上传附件? 正常情况,我们可以在QM01/QM02事务代码创建或者修改一个Quality Notification(质量通知单)的时候上传附件. ...
- 相册权限_苹果手机惊现漏洞?App在未获取相册权限的情况下成功读取照片
近日,知乎上网友爆料发现苹果手机存在漏洞,一款名叫"时间规划局"的App可在未获取相册权限的情况下读取照片.专家猜测可能是App调用了苹果的私有库,绕过了系统的授权机制. 2月26 ...
- 神兵利器 - 在没有任何权限的情况下获取任何 Microsoft Windows 用户密码
神兵利器 - 在没有任何权限的情况下获取任何 Microsoft Windows 用户密码. 项目地址:https://github.com/DarkCoderSc/win-brute-logon 目 ...
- 在有权限的情况下,使用CMD开启3389端口
前有掘井者,后有饮水人 作为一个初学者来说,一切知识都是新鲜且引人入胜的,但是大脑容量有限,大多数知识只会在脑子形成一个印象,并没有完全记住详细内容,所以这里记录一些有用的知识,等自己想用却又记不住的 ...
- 在不重启Linux服务器的情况下在线识别新添加的磁盘
前言 在我们使用 Linux系统的过程中,有时会因为初始时磁盘空间的分配不足,使用中途需要将挂载点扩容的情况,这时候就需要我们挂载新的磁盘到服务器上,但是如果我们在 Linux 运行过程中挂载新磁盘 ...
- android自定义通知栏图标大小,Android不使用自定义布局情况下实现自定义通知栏图标的方法...
本文实例讲述了Android不使用自定义布局情况下实现自定义通知栏图标的方法.分享给大家供大家参考,具体如下: 自定义通知栏图标?不是很简单么.自定义布局都不在话下! 是的,有xml布局文件当然一切都 ...
- Cesium使用技巧 - 离线情况下使用自定义地图服务(取消对Bing地图的访问)
Cesium使用技巧 - 离线情况下使用自定义地图服务(取消对Bing地图的访问) 本人在做项目的时候,由于项目要求限制,必须在 完全断网的情况下 使用Cesium.因此根据Cesium的API文档, ...
- android6.0 sd卡卸载api,android6.0 用户关掉sd卡读取权限的情况下, 还能做到手机缓存么?...
兄弟,你理解错了. 可以看看官方文档. Android的储存空间分两块:Internal storage和External storage Internal storage 总是可用的,不需要额外权限 ...
- oracle dba 创建视图,拥有dba权限的情况下创建视图报ORA-01031: insufficient privileg错误...
今天在oracle中以dba权限创建一个视图时报ORA-01031的错误,最后确定s这是oracle本身的限制,如果在非sys用户下创建基于数据字典或动态性能视图为基表的视图会报ORA-01031的错 ...
最新文章
- linux resolv.conf详解
- .net中窗体之间的数据交换总结
- python中 __name__及__main()__的妙处02
- js 字符串截取_【js】让你一次性搞清楚slice,substr,substring字符串截取函数
- python批量读取文件夹的图片并处理成模型输入格式
- rdd数据存内存 数据量_「大数据」(七十七) Spark之IO机制
- spring security简单教程以及实现完全前后端分离
- mysql显错注入,SQL注入:显错注入
- Algorithm:字典序最小问题
- GitHub 一周热点:听说程序员都是颜控?
- (Quicker)懒人福利:鼠标快捷操作工具箱
- “同样的”约束,不同的位置
- 空间可能与时间一样,也是不可逆转的
- 强悍修改WIN7的文件夹背景(修改DLL)
- AWVS14.1.2下载安装教程
- android切图双数,UI切图与命名规范
- hudi系列-文件压缩(compaction)
- GH4199变形合金
- 苹果税务信息填写教程
- 量子通信借助计算机,量子通信技术核心——量子计算算法
热门文章
- Spark中foreachRDD、foreachPartition和foreach解读
- Linux02-学习记录
- [译] 关于CSS中的float和position (父容器div内的子元素div为float时,父元素无法撑开(或高度自适应)的解决方式)
- Team Foundation Server 2010 安装、部署与配置(四):设置 .
- 保险条款精解(四)索赔——不可不看,因为您以前可能没听说过
- 王道 —— 进程通信
- leetcode - 801. 使序列递增的最小交换次数
- python用符号计算检验多维数组的计算
- android系统存储路径在哪里,Android 手机存储目录
- 数据可视化系列(一):Matplotlib初相识