在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 , in initialize
_replace_file(fpath, cache_file)
OSError: [Errno ] 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 = dictionary
else:
self.dictionary = _get_abs_path(dictionary)
self.FREQ = {}
self.total =
self.user_word_tag_tab = {}
self.initialized = False
self.tmp_dir = None
# self.tmp_dir = '/'
self.cache_file = None

修改源码,在64行self.tmp_dir中可以设置自定义缓存路径。

另外一种方式是在代码中修改,以下是jieba单例模式demo

 class Singleton(object):
"""
Jieba Utils Class
"""
_instance = None def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance class JiebaUtil(Singleton):
"""
jiebautil 工具包
"""
_jieba_instance = None def get_instance(self):
"""
get the global jieba instance
"""
if self._jieba_instance:
return self._jieba_instance
print 'initialize...'
obj = jieba.Tokenizer()
obj.tmp_dir = dirpath
obj.load_userdict(user_dict_path)
obj.initialize()
self._jieba_instance = obj
return obj if __name__ == '__main__': one = JiebaUtil()
two = JiebaUtil() print one == two tkn = one.get_instance()
tkn2 = one.get_instance()
print tkn == tkn2 print id(one), id(two) print id(tkn), id(tkn2)

在27行中可以设置自定义的他们tmp_dir缓存路径。

参考:

http://funhacks.net/2017/01/17/singleton/

https://blog.csdn.net/sijiaqi11/article/details/78601258

jieba分词单例模式及linux权限不够情况下tmp_dir自定义的更多相关文章

  1. linux在telnet情况下root登录提示login incorrect

    root登录时总是提示 login incorrect SSH可以登录 别的用户也可以通过telnet登录 唯独root不可以   解决方法: vi /etc/pam.d/login # auth r ...

  2. sqlserver修改sa密码(在windows登陆没有权限的情况下)

    对于windows用户没有权限执行alter login sa enable的情况下,采用如下方法可以成功修改sa密码登陆. . 用Run as a administrator打开命令提示符里输入NE ...

  3. ios --xib自定义,解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题

    在使用xib自定义view的时候,个人习惯性的直接使用xib中的约束,所以自然而然的要打开Autolayout.以前在使用的时候没有发现什么问题,最近项目中使用的时候突然发现在导航栏透明的情况下,出现 ...

  4. linux无网络情况下安装rpm包

    首先理清楚两个东西:rpm和yum.rpm全称redhat package manager,用来管理软件包:yum全称yellow dog updater,modified,它是rpm的前端程序,因为 ...

  5. 在无修改权限的情况下修改文件hosts中的内容

    今天遇到了一个问题,本来希望修改hosts中的内容,但保存时被告知无权限,网上搜索有很多方法都无效,最后搜到一个简单的方法:将hosts文件复制到桌面上,修改,然后覆盖原来位置的hosts文件即可!

  6. 在没有创建Provision Profile权限的情况下 发布Enterprise inhouse app 的方法

    由于用普通开发者证书,发布的app或ipa没法在普通机器上安装运行,原因是apple限制了普通开发者发布appstore以外的环境中,只有Enterprise企业版证书才能发布inhouse. 今天在 ...

  7. Linux权限管理.md

    Linux 文件的权限 Linux文件权限简介 Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: # ...

  8. 自然语言处理之jieba分词

    在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...

  9. python结巴(jieba)分词

    python结巴(jieba)分词 一.特点 1.支持三种分词模式: (1)精确模式:试图将句子最精确的切开,适合文本分析. (2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解 ...

随机推荐

  1. 从vue的组件传值着手浅谈观察者模式

    首先,提到观察者模式,这不禁让我想到了MVVM,MVVM架构模式感觉用到了观察者的思想. 我们还是按照惯例,了解一下什么是观察者模式 观察者模式,类似发布订阅模式,完成这个动作首先最少得有两个不同的对 ...

  2. XMPP即时通讯协议使用(十一)——Openfire表结构汇总

    行号 字段名称 字段描述 字段类型 长度 主键 说明 允许为空 用户组数据表(ofGroup) 1 groupName 组名 varchar2 50 ★   NOT NULL 2 descriptio ...

  3. elasticsearch Java Client用户指南

    这里使用的Java客户端版本是5.1.2,Elasticsearch的版本号也要是5.1.2,否则一些功能可能不支持. 之前介绍过Spring Data Elasticsearch,那里也是使用了本文 ...

  4. 转载:HTTP详解

    第一部分: 1. HTTP简介 HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使 ...

  5. JavaScript 下载大文件解决方案(Blob+OjbectURL)

    结合Blob和OjbectURL实现更大的文件下载: var a = document.createElement('a'); var txt = '.....content....'; for(va ...

  6. 代码解释n |= n >>> 16

    public static int nextPowerOf2(int n) {n -= 1;n |= n >>> 16;n |= n >>> 8;n |= n &g ...

  7. python3.x __str__与__repr__

    __repr__和__str__用于显示,__str__是面向用户的,而__repr__面向coder[调试与开发] repr(默认交互式回显)[来自python入门] str(也就是打印语句) 一般 ...

  8. 部署.net Core 到 Windows server 2008 r2 IIs

    1. 将项目发布 2.iis 新建网站,设置 3 安装windows  server  hosting 4 关于报错 1.下载sdk https://www.microsoft.com/net/lea ...

  9. 【集群】JedisCluster 原理

    1. JedisCluster类结构 JedisCluster是针对RedisCluster的java客户端,它封装了java访问redis集群的各种操作,包括初始化连接.请求重定向等.我们先来看下J ...

  10. java-特殊字符转义转换

    常见特殊字符:如下 <>…&—\"·‘’ java替换 /* * 特殊字符转换 */ public static String replacesss(String ss) ...