美文网首页数据分析人人可以学Python中文分词
Python分词模块jieba (01)-jieba安装,分词,

Python分词模块jieba (01)-jieba安装,分词,

作者: HiWoo | 来源:发表于2017-04-24 12:22 被阅读2382次
    人人可以学Python.png

    分词模块jieba,说话结巴的jieba。它是python比较好用的分词模块, 支持中文简体,繁体分词,还支持自定义词库。
    主要讲jieba的分词,提取关键词,自定义词语,词库切换这几个功能。

    安装jieba#####

    命令安装:

    pip install jieba
    (venv) allenwoo@~/renren$ pip install jieba
    Collecting jieba
    Installing collected packages: jieba
    Successfully installed jieba-0.38
    

    分词cut
    jieba.cut()分词提供了多种模式:全模式,精确模式,搜索引擎模式
    全模式:速度块,扫描成词的词语,但时会出现歧义的词语
    精确模式:尽可能最准确非切分词语,比较适合作文本分析
    搜索引擎模式:就是精确模式的基础上,对长词再次切分,提高召回率
    例子:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*- 
    import jieba
    strt = "人人编程时我们,适合编程初学者学习python的教材,也是好专业的童鞋关注学习" 
    # 全模式
    sl = jieba.cut(strt, cut_all=True)
    print "全模式分词结果:", ",".join(sl)
    print('\n')
     
    # 精确模式,默认hi精确模式,所以可以不指定cut_all=False
    sl = jieba.cut(strt, cut_all=False)
    print "精确模式分词结果:", ",".join(sl)
    print('\n')
     
    # 搜索引擎模式
    sl = jieba.cut_for_search(strt)
    print "搜索引擎模式分词结果:", ",".join(sl)
    

    运行下:

    (venv) allenwoo@~/renren$ python test.py 
    Building prefix dict from the default dictionary ...
    Loading model from cache /var/folders/5c/0vmv6d5d2pqdwfl78gc436zw0000gn/T/jieba.cache
    Loading model cost 0.438 seconds.
    Prefix dict has been built succesfully.
    全模式分词结果: 人人,编程,时,我们,,,适合,合编,编程,初学,初学者,学者,学习,python,的,教材,,,也,是,好,专业,的,童鞋,关注,学习
    
    精确模式分词结果: 人人,编程,时,我们,,,适合,编程,初学者,学习,python,的,教材,,,也,是,好,专业,的,童鞋,关注,学习
    
    搜索引擎模式分词结果: 人人,编程,时,我们,,,适合,编程,初学,学者,初学者,学习,python,的,教材,,,也,是,好,专业,的,童鞋,关注,学习
    

    解释:从结果可以看出"全模式"有不少歧义,比如适合,合编,编程,初学,初学者,学者,而精确模式的结果是:适合,编程,初学者
    执行前jieba会初始化加载词库,如下

    Building prefix dict from the default dictionary ...
    Loading model from cache /var/folders/5c/0vmv6d5d2pqdwfl78gc436zw0000gn/T/jieba.cache
    Loading model cost 0.438 seconds.
    Prefix dict has been built succesfully.
    

    附:如果不希望每次都加载词库,可以让jieba初始化后再后台一直运行
    比如在flask中使用的时候应该在初始化app文件中初始化jieba,然后其他程序再调用初始化后的,这个之后讲flask的时候会讲到

    关键字提取nalyse.extract_tags:#####
    jieba.analyse.extract_tags(sentence,topK)
    sentence: 文本字符串
    topK:  前几个,默认时20
    

    例子:
    注意:import jieba.analyse,而不是jieba

    #!/usr/bin/python
    # -*- coding: UTF-8 -*- 
    import jieba
    import jieba.analyse
    strt = "人人编程是适合编程初学者学习python关注的公众号,也是好专业的童鞋关注学习。我们讲讲解python基础编程,python一些第三方模块的使用,python一些第三方框架如flask web框架等"
    # topK 默认为20
    keywords = jieba.analyse.extract_tags(strt)
    print(",".join(keywords))
    print("\n")
     
    keywords = jieba.analyse.extract_tags(strt, topK=3)
    print(",".join(keywords))
    print("\n")
     
    # 有时候我们不确定该取几个关键词,这个时候我们可以取总词的百分比
    sl = jieba.cut(strt)
    w_cnt = len(list(sl))
    print("一共有{}个词".format(w_cnt))
    # 取5%
    get_cnt = int(w_cnt*0.05)
    print("取5%数量的关键词:{}个".format(get_cnt))
    keywords = jieba.analyse.extract_tags(strt, topK=get_cnt)
    print(",".join(keywords))
    

    结果

    python,编程,第三方,框架,童鞋,web,flask,学习,初学者,关注,模块,讲解,一些,人人,公众,适合,专业,基础,使用,我们
    python,编程,第三方
    一共有46个词
    取5%数量的关键词:2个
    python,编程
    

    jieba动态添加自定义词

    #!/usr/bin/python
    # -*- coding: UTF-8 -*- 
    import jieba
    strt = "我是巴拉巴拉小魔鬼" 
    sl = jieba.cut(strt)
    print "[自定义前]:","/".join(sl)
     
    # 添加自定义词
    jieba.add_word('巴拉巴拉')
    jieba.add_word('小魔鬼')
    sl = jieba.cut(strt)
    print "[自定义后]:", "/".join(sl)
    

    结果

    [自定义前]: 我/是/巴拉巴/拉小/魔鬼
    [自定义后]: 我/是/巴拉巴拉/小魔
    

    我们也可以自己定义了词库,需要使用的时候把我们自定义的词库也load进来,这样jieba就会同时使用 “jieba初始化时加载的词库” 和 “我们自定义的词库”
    在我们本地下新建一个文件renren-dict.txt, 写入一个词语

    (venv) allenwoo@~/renren$ cat renren-dict.txt 
    python人 5 nz
    
      #!/usr/bin/python
    # -*- coding: UTF-8 -*- 
    import jieba
    strt = "我们python人,玩蛇者" 
    sl = jieba.cut(strt)
    print "[加载自定义词库前]:","/".join(sl)
     
    # 加载自定义词库
    jieba.load_userdict("./renren-dict.txt")
    sl = jieba.cut(strt)
    print "[加载自定义词库后]:", "/".join(sl)
    

    结果

    [加载自定义词库前]: 我们/python/人/,/玩蛇者
    [加载自定义词库后]: 我们/python人/,/玩蛇者
    因为我们自定义的词库将 “python人”定义为一个词了
    

    词库切换:
    上面的load_userdict时加载自定义词库和jieba初始化词库一同使用
    但是,默认的初始化词库放在安装目录下,很多时候我们需要替换掉它,替换成我们觉得更全面的词库。还有时候我们需要将它放到自己的目录下面。
    这个时候我们就可以使用jieba的词库切换功能set_dictionary()
    我们可以将jieba默认词库copy到我们自己目录下,也可以网上寻找更全面的词库
    (ubuntu)默认词库路径在模块安装路径下:
    如果是虚拟环境

    venv/lib/python2.7/site-packages/jieba/dict.txt
    

    例子:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*- 
    import jieba
    # 切换词库
    jieba.set_dictionary("./renren-dict.txt")
    strt = "我们python人,玩蛇者" 
    sl = jieba.cut(strt)
    print "/".join(sl)
    

    如果我们切换了词库,这个时候程序就会初始化我们指定的词库,而不加载默认路径的词库

    (venv) allenwoo@~/renren$ python test.py 
    Building prefix dict from /Users/allenwoo/renren/renren-dict.txt ...
    Dumping model to file cache /var/folders/5c/0vmv6d5d2pqdwfl78gc436zw0000gn/T/jieba.ue964acea829f11ec25dab31f363e67bf.cache
    Loading model cost 0.003 seconds.
    Prefix dict has been built succesfully.
    我们/python人/,/玩蛇者
    ```python
    jieba的功能还没讲完,之后继续.

    相关文章

      网友评论

      • f47a802b35d4:漂亮的小哥哥or小姐姐,那个切换词库没太看懂,请问我们自定义的词库有什么格式要求么?为什么运行老是报错呢?😭
        f47a802b35d4:@Woo93 嗯嗯,我再试试,谢谢啦啦啦~
        HiWoo:@Magi_Cheung 格式一行一个,如:python人 5 nz

      本文标题:Python分词模块jieba (01)-jieba安装,分词,

      本文链接:https://www.haomeiwen.com/subject/taryzttx.html