jieba_jiebar - CSDN
精华内容
参与话题
  • Python中文分词 jieba 十五分钟入门与进阶

    万次阅读 多人点赞 2018-09-20 20:57:50
    整体介绍jieba 基于Python的中文分词工具,安装使用非常方便,直接pip即可,2/3都可以,功能强悍,博主十分推荐 github:https://github.com/fxsjy/jieba 开源中国地址:...

    整体介绍

    jieba 基于Python的中文分词工具,安装使用非常方便,直接pip即可,2/3都可以,功能强悍,博主十分推荐
    github:https://github.com/fxsjy/jieba
    开源中国地址:http://www.oschina.net/p/jieba/?fromerr=LRXZzk9z
    写这篇文章花费两个小时小时,阅读需要十五分钟,读完本篇文章后您将能上手jieba

    下篇博文将介绍将任意中文文本生成中文词云

    同时如果你希望使用其它分词工具,那么你可以留意我之后的博客,我会在接下来的日子里发布其他有关内容.

    三种分词模式与一个参数##

    以下代码主要来自于jieba的github,你可以在github下载该源码

    import jieba
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True, HMM=False)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=False, HMM=True)
    print("Default Mode: " + "/ ".join(seg_list))  # 默认模式
    
    seg_list = jieba.cut("他来到了网易杭研大厦", HMM=False)
    print(", ".join(seg_list))
    
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", HMM=False)  # 搜索引擎模式
    print(", ".join(seg_list))
    
    # jieba.cut的默认参数只有三个,jieba源码如下
    # cut(self, sentence, cut_all=False, HMM=True)
    # 分别为:输入文本 是否为全模式分词 与是否开启HMM进行中文分词
    

    分词模式的运行结果

    关键词提取

    from os import path
    import jieba.analyse as analyse
    
    d = path.dirname(__file__)
    
    text_path = 'txt/lz.txt' #设置要分析的文本路径
    text = open(path.join(d, text_path)).read()
    
    for key in analyse.extract_tags(text,50, withWeight=False):
    # 使用jieba.analyse.extract_tags()参数提取关键字,默认参数为50
        print key.encode('utf-8')
        # 设置输出编码为utf-8不然在因为win下控制台默认中文字符集为gbk,所以会出现乱码
        # 当withWeight=True时,将会返回number类型的一个权重值(TF-IDF)
    

    提取关键词的运行效果

    运行结果如图所示,但是同样的我们也发现了一些问题,比如:
    问题一:
    分词错误,在运行结果中中"路明非"(龙族男主)被分成了"路明"和"明非"啷个中文词语,这是因为jieba的词库中并不含有该词的原因,同样的原因以及jieba词库比较老,因而在许多文本分词时都会产生这种情况,而这个问题我们将在第五个模块"三种可以让分词更准确的方法"解决
    问题二:
    出现非实意词语,无论在哪种语言中,都会存在大量的非实意单词,这一类词云我们需要在进行中文分词时进行去除停用词,这个问题将在下一个模块中解决

    中文歧义测试与去除停用词##

    本段代码主要来自于《机器学习实践指南(第二版))》,其作者为麦好,ps:这是一本好书

    import jieba
    TestStr = "2010年底部队友谊篮球赛结束"
    # 因为在汉语中没有空格进行词语的分隔,所以经常会出现中文歧义,比如年底-底部-部队-队友
    # jieba 默认启用了HMM(隐马尔科夫模型)进行中文分词,实际效果不错
    
    seg_list = jieba.cut(TestStr, cut_all=True)
    print "Full Mode:", "/ ".join(seg_list) # 全模式
    
    seg_list = jieba.cut(TestStr, cut_all=False)
    print "Default Mode:", "/ ".join(seg_list) # 默认模式
    # 在默认模式下有对中文歧义有较好的分类方式
    
    seg_list = jieba.cut_for_search(TestStr) # 搜索引擎模式
    print "cut for Search","/".join(seg_list)
    

    中文歧义测试

    去除文本中的停用词

    # - * - coding: utf - 8 -*-
    #
    # 作者:田丰(FontTian)
    # 创建时间:'2017/5/27'
    # 邮箱:fonttian@163.com
    # CSDN:http://blog.csdn.net/fontthrone
    
    import sys
    import jieba
    from os import path
    
    d = path.dirname(__file__)
    stopwords_path = 'stopwords\stopwords1893.txt' # 停用词词表
    
    text_path = 'txt/lz.txt' #设置要分析的文本路径
    text = open(path.join(d, text_path)).read()
    
    def jiebaclearText(text):
        mywordlist = []
        seg_list = jieba.cut(text, cut_all=False)
        liststr="/ ".join(seg_list)
        f_stop = open(stopwords_path)
        try:
            f_stop_text = f_stop.read( )
            f_stop_text=unicode(f_stop_text,'utf-8')
        finally:
            f_stop.close( )
        f_stop_seg_list=f_stop_text.split('\n')
        for myword in liststr.split('/'):
            if not(myword.strip() in f_stop_seg_list) and len(myword.strip())>1:
                mywordlist.append(myword)
        return ''.join(mywordlist)
    
    text1 = jiebaclearText(text)
    print text1
    

    龙族中文分词去除中文停用词后的效果

    三种可以让分词更准确的方法##

    方案一,在jieba中添加中文词语:
    这种方法可以有效的解决之前龙族男主"路明非"被分为"路明"和"明非"两个词的情况

    #这个只需要在源代码中加入一个语句即可
    import sys
    import jieba
    from os import path
    
    d = path.dirname(__file__)
    stopwords_path = 'stopwords\stopwords1893.txt' # 停用词词表
    
    jieba.add_word('路明非')
    # 添加的自定义中文语句的代码在这里
    # 添加的自定义中文语句的代码在这里
    # 添加的自定义中文语句的代码在这里
    
    text_path = 'txt/lz.txt' #设置要分析的文本路径
    text = open(path.join(d, text_path)).read()
    
    def jiebaclearText(text):
        mywordlist = []
        seg_list = jieba.cut(text, cut_all=False)
        liststr="/ ".join(seg_list)
        f_stop = open(stopwords_path)
        try:
            f_stop_text = f_stop.read( )
            f_stop_text=unicode(f_stop_text,'utf-8')
        finally:
            f_stop.close( )
        f_stop_seg_list=f_stop_text.split('\n')
        for myword in liststr.split('/'):
            if not(myword.strip() in f_stop_seg_list) and len(myword.strip())>1:
                mywordlist.append(myword)
        return ''.join(mywordlist)
    
    text1 = jiebaclearText(text)
    print text1
    

    运行效果如下:
    添加自定义语句之后

    方案二,添加自定义词库:
    下面的代码主要来自于jieba的github源码,你可以在github下载该例子

    #encoding=utf-8
    from __future__ import print_function, unicode_literals
    import sys
    sys.path.append("../")
    import jieba
    jieba.load_userdict("userdict.txt")
    # jieba采用延迟加载,"import jieba"不会立即触发词典的加载,一旦有必要才开始加载词典构建trie。如果你想手工初始jieba,也可以手动初始化。示例如下:
    # import jieba
    # jieba.initialize() #手动初始化(可选)
    # 在0.28之前的版本是不能指定主词典的路径的,有了延迟加载机制后,你可以改变主词典的路径:
    # 注意用户词典为主词典即优先考虑的词典,原词典此时变为非主词典
    # jieba.set_dictionary('data/dict.txt.big')
    
    import jieba.posseg as pseg
    
    test_sent = (
    "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
    "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
    "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
    )
    words = jieba.cut(test_sent)
    print('/'.join(words))
    
    print("="*40)
    
    result = pseg.cut(test_sent)
    # pseg.cut 切分,并显示词性
    # 下面是userdict.txt的内容,如果不加入这个词库,那么在运行结果中,云计算,创新办等词都将无法识别
    '''
    云计算 5
    李小福 2 nr
    创新办 3 i
    easy_install 3 eng
    好用 300
    韩玉赏鉴 3 nz
    八一双鹿 3 nz
    台中
    凱特琳 nz
    Edu Trust认证 2000
    '''
    
    

    添加用户词典

    下面这段代码主要来自于jieba的github,你可以在github下载该源码

    print('='*40)
    print('添加自定义词典/调整词典')
    print('-'*40)
    
    print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
    #如果/放到/post/中将/出错/。
    # 调整词典使 中将 变为中/将
    print(jieba.suggest_freq(('中', '将'), True))
    #494
    print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
    #如果/放到/post/中/将/出错/。
    print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
    #「/台/中/」/正确/应该/不会/被/切开
    print(jieba.suggest_freq('台中', True))
    print(jieba.suggest_freq('台中', True))
    #69
    # 调整词典使 台中 不被分词为台/中
    print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
    #「/台中/」/正确/应该/不会/被/切开
    

    并行计算

    下面这段代码主要来自于jieba的github,你可以在github下载该源码

    原理:将目标文本按行分隔后,把各行文本分配到多个python进程并行分词,然后归并结果,从而获得分词速度的可观提升

    基于python自带的multiprocessing模块,目前暂不支持windows

    import sys
    import time
    sys.path.append("../../")
    import jieba
    
    jieba.enable_parallel() # 关闭并行分词
    jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数 
    
    url = sys.argv[1]
    content = open(url,"rb").read()
    t1 = time.time()
    words = "/ ".join(jieba.cut(content))
    
    t2 = time.time()
    tm_cost = t2-t1
    
    log_f = open("1.log","wb")
    log_f.write(words.encode('utf-8'))
    
    print('speed %s bytes/second' % (len(content)/tm_cost))
    

    实验结果:在4核3.4GHz Linux机器上,对金庸全集进行精确分词,获得了1MB/s的速度,是单进程版的3.3倍。

    展开全文
  • Python入门:jieba库的使用

    万次阅读 多人点赞 2018-05-31 21:36:13
    jieba 库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式、全模式和搜索引擎模式,下面是三种模式的特点。 精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析 全模式:...

    jieba库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式、全模式和搜索引擎模式,下面是三种模式的特点。

    精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析

    全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据

    搜索引擎模式:在精确模式的基础上,对长词再次进行切分

    一、jieba库的安装

    因为 jieba 是一个第三方库,所有需要我们在本地进行安装。

    Windows 下使用命令安装:在联网状态下,在命令行下输入 pip install jieba 进行安装,安装完成后会提示安装成功
    这里写图片描述
    在 pyCharm 中安装:打开 settings,搜索 Project Interpreter,在右边的窗口选择 + 号,点击后在搜索框搜索 jieba,点击安装即可

    二、jieba三种模式的使用

    # -*- coding: utf-8 -*-
    import jieba
    
    seg_str = "好好学习,天天向上。"
    
    print("/".join(jieba.lcut(seg_str)))    # 精简模式,返回一个列表类型的结果
    print("/".join(jieba.lcut(seg_str, cut_all=True)))      # 全模式,使用 'cut_all=True' 指定 
    print("/".join(jieba.lcut_for_search(seg_str)))     # 搜索引擎模式
    

    分词效果:
    这里写图片描述

    三、jieba 分词简单应用

    需求:使用 jieba 分词对一个文本进行分词,统计次数出现最多的词语,这里以三国演义为例

    # -*- coding: utf-8 -*-
    import jieba
    
    txt = open("三国演义.txt", "r", encoding='utf-8').read()
    words = jieba.lcut(txt)     # 使用精确模式对文本进行分词
    counts = {}     # 通过键值对的形式存储词语及其出现的次数
    
    for word in words:
        if len(word) == 1:    # 单个词语不计算在内
            continue
        else:
            counts[word] = counts.get(word, 0) + 1    # 遍历所有词语,每出现一次其对应的值加 1
    
    items = list(counts.items())
    items.sort(key=lambda x: x[1], reverse=True)    # 根据词语出现的次数进行从大到小排序
    
    for i in range(3):
        word, count = items[i]
        print("{0:<5}{1:>5}".format(word, count))

    统计结果:
    这里写图片描述
    你可以随便找一个文本文档,也可以到 https://github.com/coderjas/python-quick 下载上面例子中的文档。

    四、扩展:英文单词统计

    上面的例子统计实现了中文文档中出现最多的词语,接着我们就来统计一下一个英文文档中出现次数最多的单词。原理同上

    # -*- coding: utf-8 -*-
    
    def get_text():
        txt = open("1.txt", "r", encoding='UTF-8').read()
        txt = txt.lower()
        for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
            txt = txt.replace(ch, " ")      # 将文本中特殊字符替换为空格
        return txt
    
    file_txt = get_text()
    words = file_txt.split()    # 对字符串进行分割,获得单词列表
    counts = {}
    
    for word in words:
        if len(word) == 1:
            continue
        else:
            counts[word] = counts.get(word, 0) + 1 
    
    items = list(counts.items())    
    items.sort(key=lambda x: x[1], reverse=True)      
    
    for i in range(5):
        word, count = items[i]
        print("{0:<5}->{1:>5}".format(word, count))

    统计结果:
    这里写图片描述

    展开全文
  • jieba “结巴”中文分词:做最好的 Python 中文分词组件 github:https://github.com/fxsjy/jieba 特点 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成...

    jieba

    “结巴”中文分词:做最好的 Python 中文分词组件
    github:https://github.com/fxsjy/jieba

    特点

    • 支持三种分词模式:

      • 精确模式,试图将句子最精确地切开,适合文本分析;
      • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
      • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
    • 支持繁体分词

    • 支持自定义词典
    • MIT 授权协议

    安装说明

    代码对 Python 2/3 均兼容

    • 全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
    • 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
    • 手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
    • 通过 import jieba 来引用

    算法

    • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
    • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
    • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

    主要功能

    1. 分词

    • jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
    • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
    • 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
    • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
    • jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
    • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

    代码示例

    # encoding=utf-8
    import jieba
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
    
    seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
    print(", ".join(seg_list))
    
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
    print(", ".join(seg_list))

    输出:

    【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
    
    【精确模式】: 我/ 来到/ 北京/ 清华大学
    
    【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
    
    【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
    

    2. 添加自定义词典

    载入词典

    • 开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率
    • 用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
    • 词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
    • 词频省略时使用自动计算的能保证分出该词的词频。

    例如:

    创新办 3 i
    云计算 5
    凱特琳 nz
    台中

    调整词典

    • 使用 add_word(word, freq=None, tag=None)del_word(word) 可在程序中动态修改词典。
    • 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

    • 注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

    代码示例:

    >>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
    如果/放到/post/中将/出错/。
    >>> jieba.suggest_freq(('中', '将'), True)
    494
    >>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
    如果/放到/post/中/将/出错/。
    >>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
    「/台/中/」/正确/应该/不会/被/切开
    >>> jieba.suggest_freq('台中', True)
    69
    >>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
    「/台中/」/正确/应该/不会/被/切开

    3. 关键词提取

    基于 TF-IDF 算法的关键词抽取

    import jieba.analyse

    • jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
      • sentence 为待提取的文本
      • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
      • withWeight 为是否一并返回关键词权重值,默认值为 False
      • allowPOS 仅包括指定词性的词,默认值为空,即不筛选
    • jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件

    代码示例 (关键词提取)

    https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py

    关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径

    关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径

    关键词一并返回关键词权重值示例

    基于 TextRank 算法的关键词抽取

    • jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 直接使用,接口相同,注意默认过滤词性。
    • jieba.analyse.TextRank() 新建自定义 TextRank 实例

    算法论文: TextRank: Bringing Order into Texts

    基本思想:

    1. 将待抽取关键词的文本进行分词
    2. 以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
    3. 计算图中节点的PageRank,注意是无向带权图

    使用示例:

    test/demo.py

    4. 词性标注

    • jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
    • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
    • 用法示例
    >>> import jieba.posseg as pseg
    >>> words = pseg.cut("我爱北京天安门")
    >>> for word, flag in words:
    ...    print('%s %s' % (word, flag))
    ...
    我 r
    爱 v
    北京 ns
    天安门 ns

    5. 并行分词

    • 原理:将目标文本按行分隔后,把各行文本分配到多个 Python 进程并行分词,然后归并结果,从而获得分词速度的可观提升
    • 基于 python 自带的 multiprocessing 模块,目前暂不支持 Windows
    • 用法:

      • jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数
      • jieba.disable_parallel() # 关闭并行分词模式
    • 例子:https://github.com/fxsjy/jieba/blob/master/test/parallel/test_file.py

    • 实验结果:在 4 核 3.4GHz Linux 机器上,对金庸全集进行精确分词,获得了 1MB/s 的速度,是单进程版的 3.3 倍。

    • 注意:并行分词仅支持默认分词器 jieba.dtjieba.posseg.dt

    6. Tokenize:返回词语在原文的起止位置

    • 注意,输入参数只接受 unicode
    • 默认模式
    result = jieba.tokenize(u'永和服装饰品有限公司')
    for tk in result:
        print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
    word 永和                start: 0                end:2
    word 服装                start: 2                end:4
    word 饰品                start: 4                end:6
    word 有限公司            start: 6                end:10
    
    • 搜索模式
    result = jieba.tokenize(u'永和服装饰品有限公司', mode='search')
    for tk in result:
        print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
    word 永和                start: 0                end:2
    word 服装                start: 2                end:4
    word 饰品                start: 4                end:6
    word 有限                start: 6                end:8
    word 公司                start: 8                end:10
    word 有限公司            start: 6                end:10

    7. ChineseAnalyzer for Whoosh 搜索引擎

    8. 命令行分词

    使用示例:python -m jieba news.txt > cut_result.txt

    命令行选项(翻译):

    使用: python -m jieba [options] filename
    
    结巴命令行界面。
    
    固定参数:
      filename              输入文件
    
    可选参数:
      -h, --help            显示此帮助信息并退出
      -d [DELIM], --delimiter [DELIM]
                            使用 DELIM 分隔词语,而不是用默认的' / '。
                            若不指定 DELIM,则使用一个空格分隔。
      -p [DELIM], --pos [DELIM]
                            启用词性标注;如果指定 DELIM,词语和词性之间
                            用它分隔,否则用 _ 分隔
      -D DICT, --dict DICT  使用 DICT 代替默认词典
      -u USER_DICT, --user-dict USER_DICT
                            使用 USER_DICT 作为附加词典,与默认词典或自定义词典配合使用
      -a, --cut-all         全模式分词(不支持词性标注)
      -n, --no-hmm          不使用隐含马尔可夫模型
      -q, --quiet           不输出载入信息到 STDERR
      -V, --version         显示版本信息并退出
    
    如果没有指定文件名,则使用标准输入。
    

    --help 选项输出:

    $> python -m jieba --help
    Jieba command line interface.
    
    positional arguments:
      filename              input file
    
    optional arguments:
      -h, --help            show this help message and exit
      -d [DELIM], --delimiter [DELIM]
                            use DELIM instead of ' / ' for word delimiter; or a
                            space if it is used without DELIM
      -p [DELIM], --pos [DELIM]
                            enable POS tagging; if DELIM is specified, use DELIM
                            instead of '_' for POS delimiter
      -D DICT, --dict DICT  use DICT as dictionary
      -u USER_DICT, --user-dict USER_DICT
                            use USER_DICT together with the default dictionary or
                            DICT (if specified)
      -a, --cut-all         full pattern cutting (ignored with POS tagging)
      -n, --no-hmm          don't use the Hidden Markov Model
      -q, --quiet           don't print loading messages to stderr
      -V, --version         show program's version number and exit
    
    If no filename specified, use STDIN instead.
    

    延迟加载机制

    jieba 采用延迟加载,import jiebajieba.Tokenizer() 不会立即触发词典的加载,一旦有必要才开始加载词典构建前缀字典。如果你想手工初始 jieba,也可以手动初始化。

    import jieba
    jieba.initialize()  # 手动初始化(可选)
    

    在 0.28 之前的版本是不能指定主词典的路径的,有了延迟加载机制后,你可以改变主词典的路径:

    jieba.set_dictionary('data/dict.txt.big')
    

    例子: https://github.com/fxsjy/jieba/blob/master/test/test_change_dictpath.py

    其他词典

    1. 占用内存较小的词典文件
      https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small

    2. 支持繁体分词更好的词典文件
      https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big

    下载你所需要的词典,然后覆盖 jieba/dict.txt 即可;或者用 jieba.set_dictionary('data/dict.txt.big')

    其他语言实现

    结巴分词 Java 版本

    作者:piaolingxue
    地址:https://github.com/huaban/jieba-analysis

    结巴分词 C++ 版本

    作者:yanyiwu
    地址:https://github.com/yanyiwu/cppjieba

    结巴分词 Node.js 版本

    作者:yanyiwu
    地址:https://github.com/yanyiwu/nodejieba

    结巴分词 Erlang 版本

    作者:falood
    地址:https://github.com/falood/exjieba

    结巴分词 R 版本

    作者:qinwf
    地址:https://github.com/qinwf/jiebaR

    结巴分词 iOS 版本

    作者:yanyiwu
    地址:https://github.com/yanyiwu/iosjieba

    结巴分词 PHP 版本

    作者:fukuball
    地址:https://github.com/fukuball/jieba-php

    结巴分词 .NET(C#) 版本

    作者:anderscui
    地址:https://github.com/anderscui/jieba.NET/

    结巴分词 Go 版本

    系统集成

    1. Solr: https://github.com/sing1ee/jieba-solr

    分词速度

    • 1.5 MB / Second in Full Mode
    • 400 KB / Second in Default Mode
    • 测试环境: Intel(R) Core(TM) i7-2600 CPU @ 3.4GHz;《围城》.txt

    常见问题

    1. 模型的数据是如何生成的?

    详见: https://github.com/fxsjy/jieba/issues/7

    2. “台中”总是被切成“台 中”?(以及类似情况)

    P(台中) < P(台)×P(中),“台中”词频不够导致其成词概率较低

    解决方法:强制调高词频

    jieba.add_word('台中') 或者 jieba.suggest_freq('台中', True)

    3. “今天天气 不错”应该被切成“今天 天气 不错”?(以及类似情况)

    解决方法:强制调低词频

    jieba.suggest_freq(('今天', '天气'), True)

    或者直接删除该词 jieba.del_word('今天天气')

    4. 切出了词典中没有的词语,效果不理想?

    解决方法:关闭新词发现

    jieba.cut('丰田太省了', HMM=False)
    jieba.cut('我们中出了一个叛徒', HMM=False)

    更多问题请点击https://github.com/fxsjy/jieba/issues?sort=updated&state=closed

    修订历史

    https://github.com/fxsjy/jieba/blob/master/Changelog

    github项目地址(系列文章包含常见第三库的使用与爬虫,会持续更新)

    展开全文
  • jieba 详细介绍

    千次阅读 2018-07-27 11:00:51
    jieba "结巴"中文分词:做最好的Python中文分词组件 "Jieba"  Feature 支持三种分词模式:  精确模式,试图将句子最精确地切开,适合文本分析;  全模式,把句子中所有的...

    原文:https://github.com/fxsjy/jieba

    jieba

    "结巴"中文分词:做最好的Python中文分词组件 "Jieba" 

    Feature

    • 支持三种分词模式: 

      • 精确模式,试图将句子最精确地切开适合文本分析; 

      • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; 

      • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 

    • 支持繁体分词 

    • 支持自定义词典 

    Python 2.x 下的安装

    • 全自动安装:easy_install jieba 或者 pip install jieba 

    • 半自动安装:先下载http://pypi.python.org/pypi/jieba/ ,解压后运行python setup.py install 

    • 手动安装:将jieba目录放置于当前目录或者site-packages目录 

    • 通过import jieba 来引用 (第一次import时需要构建Trie树,需要几秒时间) 

    Python 3.x 下的安装

    • 目前master分支是只支持Python2.x 的 

    • Python3.x 版本的分支也已经基本可用: https://github.com/fxsjy/jieba/tree/jieba3k

      git clone https://github.com/fxsjy/jieba.git
      git checkout jieba3k
      python setup.py install

    Algorithm

    • 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 

    • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合 

    • 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法 

    功能 1):分词

    • jieba.cut方法接受两个输入参数: 1) 第一个参数为需要分词的字符串 2)cut_all参数用来控制是否采用全模式 

    • jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细 

    • 注意:待分词的字符串可以是gbk字符串、utf-8字符串或者unicode 

    • jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode),也可以用list(jieba.cut(...))转化为list 

    代码示例( 分词 )

    #encoding=utf-8
    import jieba
    
    seg_list = jieba.cut("我来到北京清华大学",cut_all=True)
    print "Full Mode:", "/ ".join(seg_list) #全模式
    
    seg_list = jieba.cut("我来到北京清华大学",cut_all=False)
    print "Default Mode:", "/ ".join(seg_list) #精确模式
    
    seg_list = jieba.cut("他来到了网易杭研大厦") #默认是精确模式
    print ", ".join(seg_list)
    
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") #搜索引擎模式
    print ", ".join(seg_list)

    Output:

    【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
    
    【精确模式】: 我/ 来到/ 北京/ 清华大学
    
    【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
    
    【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

    功能 2) :添加自定义词典

    • 开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率 

    • 用法: jieba.load_userdict(file_name) # file_name为自定义词典的路径 

    • 词典格式和dict.txt一样,一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),用空格隔开 

    • 范例: 

    • "通过用户自定义词典来增强歧义纠错能力" --- https://github.com/fxsjy/jieba/issues/14

    功能 3) :关键词提取

    • jieba.analyse.extract_tags(sentence,topK) #需要先import jieba.analyse 

    • setence为待提取的文本 

    • topK为返回几个TF/IDF权重最大的关键词,默认值为20 

    代码示例 (关键词提取)

    https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py

    功能 4) : 词性标注

    • 标注句子分词后每个词的词性,采用和ictclas兼容的标记法 

    • 用法示例 

      >>> import jieba.posseg as pseg
      >>> words =pseg.cut("我爱北京天安门")
      >>> for w in words:
      ...    print w.word,w.flag
      ...
      我 r
      爱 v
      北京 ns
      天安门 ns

    功能 5) : 并行分词

    • 原理:将目标文本按行分隔后,把各行文本分配到多个python进程并行分词,然后归并结果,从而获得分词速度的可观提升 

    • 基于python自带的multiprocessing模块,目前暂不支持windows 

    • 用法: 

      • jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数 

      • jieba.disable_parallel() # 关闭并行分词模式 

    • 例子: https://github.com/fxsjy/jieba/blob/master/test/parallel/test_file.py

    • 实验结果:在4核3.4GHz Linux机器上,对金庸全集进行精确分词,获得了1MB/s的速度,是单进程版的3.3倍。 

     

    功能 6) : Tokenize:返回词语在原文的起始位置

    • 注意,输入参数只接受unicode 

    • 默认模式 

    result = jieba.tokenize(u'永和服装饰品有限公司')
    for tk in result:
        print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
    
    word 永和                start: 0                end:2
    word 服装                start: 2                end:4
    word 饰品                start: 4                end:6
    word 有限公司            start: 6                end:10
    • 搜索模式 

    result = jieba.tokenize(u'永和服装饰品有限公司',mode='search')
    for tk in result:
        print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
    
    word 永和                start: 0                end:2
    word 服装                start: 2                end:4
    word 饰品                start: 4                end:6
    word 有限                start: 6                end:8
    word 公司                start: 8                end:10
    word 有限公司            start: 6                end:10

    功能 7) : ChineseAnalyzer for Whoosh搜索引擎

    其他词典

    1. 占用内存较小的词典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small

    2. 支持繁体分词更好的词典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big

    下载你所需要的词典,然后覆盖jieba/dict.txt 即可或者用jieba.set_dictionary('data/dict.txt.big')

    模块初始化机制的改变:lazy load (从0.28版本开始)

    jieba采用延迟加载,"import jieba"不会立即触发词典的加载,一旦有必要才开始加载词典构建trie。如果你想手工初始jieba,也可以手动初始化。

    import jieba
    jieba.initialize() #手动初始化(可选)

    在0.28之前的版本是不能指定主词典的路径的,有了延迟加载机制后,你可以改变主词典的路径:

    jieba.set_dictionary('data/dict.txt.big')

    例子: https://github.com/fxsjy/jieba/blob/master/test/test_change_dictpath.py

    分词速度

    • 1.5 MB / Second in Full Mode 

    • 400 KB / Second in Default Mode 

    • Test Env: Intel(R) Core(TM) i7-2600 CPU @ 3.4GHz;《围城》.txt 

    常见问题

    1)模型的数据是如何生成的?https://github.com/fxsjy/jieba/issues/7

    2)这个库的授权是? https://github.com/fxsjy/jieba/issues/2

    更多问题请点击:https://github.com/fxsjy/jieba/issues?sort=updated&state=closed

    展开全文
  • jieba安装下载

    万次阅读 多人点赞 2019-09-29 16:10:05
    插入一条: 有个更快安装下载jieba的方法,用镜像下载,非常快,2秒就行 pip install jieba -i https://pypi.douban.com/simple/ 1、打开官方网站:https://pypi.org/project/jieba/#files 2、下载,安装在安装...
  • jieba _1.0.2.zip

    2020-07-28 23:32:10
    java jieba包最全资源。 java项目中新建一个文件夹lib,并将jar包复制到lib文件夹中。 选中jieba-analysis-1.0.2,右键点击【Build Path】→【Add to Build Path 】之后该jar包就已经成功添加到了java项目中了。此时...
  • 下载jieba

    千次阅读 2019-02-17 20:48:08
    步骤: 1.打开命令行 2.联网 3.在 C:\Users\User&gt; 后面加语句 pip install jieba 形成 C:\Users\User&...pip install jieba 然后按回车,然后就开始安装 ...PS 由于我们用pip来安装的jieba库嘛...
  • Jieba分词简介

    万次阅读 2019-04-09 15:48:39
    Jieba分词官网:https://github.com/fxsjy/jieba 三种分词模式 Jieba提供了三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快...
  • jieba-0.42.1.zip

    2020-07-30 23:33:12
    中文分词工具jieba 。相比其他分词工具而言,jieba不仅只有分词这一功能,它还提供了许多分词以外的算法,支持Python、R、C++等多种编程语言的实现,使用简单,对于新手而言是一个较好的入门分词工具
  • jieba中文处理

    2020-08-24 17:23:22
    jieba中文处理 和拉丁语系不同,亚洲语言是不用空格分开每个有意义的词的。而当我们进行自然语言处理的时候,大部分情况下,词汇是我们对句子和文章理解的基础,因此需要一个工具去把完整的文本中分解成粒度更细的词...
  • jieba介绍以及分词的原理 1. jieba 是Python中的优秀的中文分词第三方库  --中文文本需要通过分词获得单个的词语 2. jieba 库提供三种分词模式 ,最简单只需要掌握一个函数 3.jieba库的安装  只需要在cmd 中...
  • jieba库基本介绍(中文分词)

    千次阅读 2019-11-25 17:16:21
    jieba库概述(jieba是优秀的中文分词第三分库) 中文文本需要通过分词获得单个的词语 jieba是优秀的中文分词第三方库,需要额外安装 jieba库提供三种分词模式,最简单只需要掌握一个函数 jieba库的安装 (cmd...
  • ModuleNotFoundError: No module named 'jieba'

    万次阅读 2019-04-22 16:44:03
    在python中import jieba分词器,报错ModuleNotFoundError: No module named 'jieba'。 原因是没有安装jieba。 解决方案: 打开终端,输入以下命令安装jieba即可。 pip install jieba ...
  • Python安装jieba库的具体步骤

    万次阅读 多人点赞 2018-05-17 15:00:43
    1.在具体地址上下载jieba——第三方中文分词函数库下载地址:https://pypi.org/project/jieba/#files2.在命令提示符里面输入命令来安装jieba库首先定位到jieba的setup.py文件的上级文件的地方,然后输入&...
  • anaconda安装jieba(被折腾了很久)终于搞定

    万次阅读 多人点赞 2020-02-24 14:44:33
    今天打算在anaconda下安装jieba,总感觉直接pip install jieba可以轻松搞定,最后发现too young to simple。 我首先使用pip install jieba或者conda install jieba(或者一些类似的变种方法)等方法安装都成功安装了...
  • jieba分词中cut和lcut的区别

    万次阅读 2019-02-25 17:17:40
    jieba.cut生成的是一个生成器,generator,也就是可以通过for循环来取里面的每一个词。 word_list= [word for word in jieba.cut(text)] jieba.lcut 直接生成的就是一个list Prefix dict has been built ...
  • python文件不能叫jieba.py修改名字,再确认jieba工具是否安装好,就ok
  • 关于IDLE报错"No Module Named 'jieba'

    千次阅读 2019-09-17 18:34:24
    明明pip已经安装了jieba,并且在pycharm也用调用该库,为什么IDLE却报错"No Module Named ‘jieba’ "??? 解决办法:把jieba的两个安装包和需要调用jieba的.py文件放到同一目录下。再执行idle 就可以使用jieba了...
  • 1.在没有引入之前,import jieba[显示:No module named 'jieba'] 2.下载第三方库到自己的电脑,譬如jieba(官方下载地址):  https://pypi.org/project/jieba/ 3.而后通过cmd运行,参考如下: 参考网址:...
  • Anaconda安装jieba、wordcloud等第三方库

    万次阅读 多人点赞 2020-03-25 16:40:47
    本文是jieba在anaconda中的安装方法,wordcloud等第三方库与jieba安装方法相同,这里是wordcloud包的下载地址 许多论坛中说使用conda install jieba安装,我的尝试是不可行的。我发现jieba作为一个第三方库,并不...
1 2 3 4 5 ... 20
收藏数 19,585
精华内容 7,834
关键字:

jieba