在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自定义相关推荐

  1. SAP 没有QM02权限的情况下如何为一个质量通知单单据上传附件?

    SAP 没有QM02权限的情况下如何为一个质量通知单单据上传附件? 正常情况,我们可以在QM01/QM02事务代码创建或者修改一个Quality Notification(质量通知单)的时候上传附件. ...

  2. 相册权限_苹果手机惊现漏洞?App在未获取相册权限的情况下成功读取照片

    近日,知乎上网友爆料发现苹果手机存在漏洞,一款名叫"时间规划局"的App可在未获取相册权限的情况下读取照片.专家猜测可能是App调用了苹果的私有库,绕过了系统的授权机制. 2月26 ...

  3. 神兵利器 - 在没有任何权限的情况下获取任何 Microsoft Windows 用户密码

    神兵利器 - 在没有任何权限的情况下获取任何 Microsoft Windows 用户密码. 项目地址:https://github.com/DarkCoderSc/win-brute-logon 目 ...

  4. 在有权限的情况下,使用CMD开启3389端口

    前有掘井者,后有饮水人 作为一个初学者来说,一切知识都是新鲜且引人入胜的,但是大脑容量有限,大多数知识只会在脑子形成一个印象,并没有完全记住详细内容,所以这里记录一些有用的知识,等自己想用却又记不住的 ...

  5. 在不重启Linux服务器的情况下在线识别新添加的磁盘

    前言  在我们使用 Linux系统的过程中,有时会因为初始时磁盘空间的分配不足,使用中途需要将挂载点扩容的情况,这时候就需要我们挂载新的磁盘到服务器上,但是如果我们在 Linux 运行过程中挂载新磁盘 ...

  6. android自定义通知栏图标大小,Android不使用自定义布局情况下实现自定义通知栏图标的方法...

    本文实例讲述了Android不使用自定义布局情况下实现自定义通知栏图标的方法.分享给大家供大家参考,具体如下: 自定义通知栏图标?不是很简单么.自定义布局都不在话下! 是的,有xml布局文件当然一切都 ...

  7. Cesium使用技巧 - 离线情况下使用自定义地图服务(取消对Bing地图的访问)

    Cesium使用技巧 - 离线情况下使用自定义地图服务(取消对Bing地图的访问) 本人在做项目的时候,由于项目要求限制,必须在 完全断网的情况下 使用Cesium.因此根据Cesium的API文档, ...

  8. android6.0 sd卡卸载api,android6.0 用户关掉sd卡读取权限的情况下, 还能做到手机缓存么?...

    兄弟,你理解错了. 可以看看官方文档. Android的储存空间分两块:Internal storage和External storage Internal storage 总是可用的,不需要额外权限 ...

  9. oracle dba 创建视图,拥有dba权限的情况下创建视图报ORA-01031: insufficient privileg错误...

    今天在oracle中以dba权限创建一个视图时报ORA-01031的错误,最后确定s这是oracle本身的限制,如果在非sys用户下创建基于数据字典或动态性能视图为基表的视图会报ORA-01031的错 ...

最新文章

  1. linux resolv.conf详解
  2. .net中窗体之间的数据交换总结
  3. python中 __name__及__main()__的妙处02
  4. js 字符串截取_【js】让你一次性搞清楚slice,substr,substring字符串截取函数
  5. python批量读取文件夹的图片并处理成模型输入格式
  6. rdd数据存内存 数据量_「大数据」(七十七) Spark之IO机制
  7. spring security简单教程以及实现完全前后端分离
  8. mysql显错注入,SQL注入:显错注入
  9. Algorithm:字典序最小问题
  10. GitHub 一周热点:听说程序员都是颜控?
  11. (Quicker)懒人福利:鼠标快捷操作工具箱
  12. “同样的”约束,不同的位置
  13. 空间可能与时间一样,也是不可逆转的
  14. 强悍修改WIN7的文件夹背景(修改DLL)
  15. AWVS14.1.2下载安装教程
  16. android切图双数,UI切图与命名规范
  17. hudi系列-文件压缩(compaction)
  18. GH4199变形合金
  19. 苹果税务信息填写教程
  20. 量子通信借助计算机,量子通信技术核心——量子计算算法

热门文章

  1. Spark中foreachRDD、foreachPartition和foreach解读
  2. Linux02-学习记录
  3. [译] 关于CSS中的float和position (父容器div内的子元素div为float时,父元素无法撑开(或高度自适应)的解决方式)
  4. Team Foundation Server 2010 安装、部署与配置(四):设置 .
  5. 保险条款精解(四)索赔——不可不看,因为您以前可能没听说过
  6. 王道 —— 进程通信
  7. leetcode - 801. 使序列递增的最小交换次数
  8. python用符号计算检验多维数组的计算
  9. android系统存储路径在哪里,Android 手机存储目录
  10. 数据可视化系列(一):Matplotlib初相识