精华内容
下载资源
问答
  • jieba分词

    2020-11-30 21:22:13
    jieba分词1、引言2、安装3、用法3.1、分词3.2、自定义词典3.3、调整词典3.4、关键词抽取4、结论 1、引言 “结巴”中文分词: 做最好的 Python 中文分词组件 jieba分词是一个python中文分词组件,其源代码见...

    1、引言

    “结巴”中文分词: 做最好的 Python 中文分词组件
    jieba分词是一个python中文分词组件,其源代码见https://github.com/fxsjy/jieba,可以对中文的句子进行切分,词性标注,关键词提取等。

    2、安装

    pip install jieba
    

    3、用法

    3.1、分词

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

    import re
    
    s = '今天天气真好啊'
    
    seg_jingque = jieba.cut(s,cut_all=False,HMM=True) # 精确模式
    print("精确模式: " + "/ ".join(seg_jingque))  # 精确模式
    
    seg_all = jieba.cut(s,cut_all=True,HMM=True) # 全模式
    print("全模式: " + "/ ".join(seg_all))  # 全模式
    
    seg_search = jieba.cut_for_search (s, HMM=True) # 搜索引擎模式
    print("搜索引擎模式: " + "/ ".join(seg_search))  # 搜索引擎模式
    

    运行结果

    精确模式: 今天天气/ 真好/ 啊
    全模式: 今天/ 今天天气/ 天天/ 天气/ 真好/ 啊
    搜索引擎模式: 今天/ 天天/ 天气/ 今天天气/ 真好/

    通过这个例子其实就可以观察到,精确模式是最常用的分词方法,全模式会将句子中所有可能的词都列举出来,搜索引擎模式则适用于搜索引擎使用。
    这里需要注意的一点是,使用jieba.cut()以及jieba.cut_for_search()等切出来的结果是可迭代的生成器,可以使用for循环来获得分词后的每一个词。或者也可以直接在函数前面加一个l来获得一个list结果。具体使用方法如下:

    import re
    
    s = '今天天气真好啊'
    
    seg_jingque = jieba.lcut(s,cut_all=False,HMM=True) # 精确模式
    print(seg_jingque) # 精确模式
    
    seg_all = jieba.lcut(s,cut_all=True,HMM=True) # 全模式
    print(seg_all) # 全模式
    
    seg_search = jieba.lcut_for_search (s, HMM=True) # 搜索引擎模式
    print(seg_search)  # 搜索引擎模式
    

    运行结果

    ['今天天气', '真好', '啊']
    ['今天', '今天天气', '天天', '天气', '真好', '啊']
    ['今天', '天天', '天气', '今天天气', '真好', '啊']
    

    参数

    jieba.cut(sentence,cut_all=False,HMM=True) # 精确模式
    jieba.cut(sentence,cut_all=True,HMM=True) # 全模式
    jieba.cut_for_search (sentence, HMM=True) # 搜索引擎模式
    

    sentence: 表示要切分的句子,待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8。
    cut_all: 参数取值为True或False,分别表示全模式与精确模式。
    HMM: 参数用来控制是否使用HMM模型,表示是否在分词过程中利用HMM进行新词发现。

    3.2、自定义词典

    jieba分词还允许使用自定义的词库,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率。用法如下:

    jieba.load_userdict(file_name)  # 载入自定义词典,file_name 为文件类对象或自定义词典的路径
    

    这个file_name里面的有固定的格式。词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。词频省略时使用自动计算的能保证分出该词的词频。下面是一个自定义词典的例子。

    云计算 5
    李小福 2 nr
    创新办 3 i
    easy_install 3 eng
    好用 300
    韩玉赏鉴 3 nz
    八一双鹿 3 nz
    台中
    凱特琳 nz
    Edu Trust认证 2000
    

    为了对比,我故意设置了一些没见过的词,下面是不加载自定义词典的分词结果

    import jieba
    senstence = '鞥啊凹蒽阿达附件阿斯如'
    words = jieba.lcut(senstence)
    words
    

    运行结果

    ['鞥', '啊', '凹', '蒽', '阿', '达', '附件', '阿斯', '如']
    

    下面加载我自己的词典,然后再进行切分,我自定义的词典是下面这样。

    鞥啊 5
    凹蒽 6
    阿达附件 8
    阿斯如 5
    
    import jieba
    jieba.load_userdict("userdict.txt")
    senstence = '鞥啊凹蒽阿达附件阿斯如'
    words = jieba.lcut(senstence)
    words
    

    运行结果

    ['鞥啊', '凹蒽', '阿达附件', '阿斯如']
    

    加载自定义的词典以后,就把自己定义的词给切分出来了。

    3.3、调整词典

    jieba.add_word(word, freq=None, tag=None) # 在程序中动态添加一个词
    jieba.del_word(word) # 在程序中动态删除一个词
    jieba.suggest_freq(segment, tune=True) # 调节单个词语的词频,使其能/不能被分词开
    

    3.4、关键词抽取

    关键词抽取有两种方法。
    1、基于 TF-IDF 算法的关键词抽取

    jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
    

    sentence 为待提取的文本
    topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
    withWeight 为是否一并返回关键词权重值,默认值为 False,True的话返回(word,weight)的list
    allowPOS 仅包括指定词性的词,默认值为空,即不筛选

    2、基于 TextRank 算法的关键词抽取

    jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 
    

    与TF-IDF方法相似,但是注意allowPOS有默认值,即会默认过滤某些词性。

    4、结论

    以上就是jieba分词的一些基本用法。其余没有写的方法基本不常用。有兴趣可以去源代码上进行探索,里面有大量并且详细的代码示例。
    有问题欢迎评论区批评指正。

    展开全文
  • Jieba分词

    2018-08-05 23:06:02
    随着NLP 技术的成熟,开源的分词工具越来越多,下面主要学习Jieba分词这一工具的操作。 一、三种分词模式 import jieba sent = '中文分词是文本处理不可或缺的一步!' seg_list = jieba.cut(sent, cut_all=...

    随着NLP 技术的成熟,开源的分词工具越来越多,下面主要学习Jieba分词这一工具的操作。

    一、三种分词模式

    import jieba
    
    sent = '中文分词是文本处理不可或缺的一步!'
    
    seg_list = jieba.cut(sent, cut_all=True)
    
    print('全模式:', '/ ' .join(seg_list)) 
    
    seg_list = jieba.cut(sent, cut_all=False)
    print('精确模式:', '/ '.join(seg_list)) 
    
    seg_list = jieba.cut(sent)  
    print('默认精确模式:', '/ '.join(seg_list))
    
    seg_list = jieba.cut_for_search(sent)  
    print('搜索引擎模式', '/ '.join(seg_list))
    
    全模式: 中文/ 分词/ 是/ 文本/ 文本处理/ 本处/ 处理/ 不可/ 不可或缺/ 或缺/ 的/ 一步/ / 
    精确模式: 中文/ 分词/ 是/ 文本处理/ 不可或缺/ 的/ 一步/ !
    默认精确模式: 中文/ 分词/ 是/ 文本处理/ 不可或缺/ 的/ 一步/ !
    搜索引擎模式 中文/ 分词/ 是/ 文本/ 本处/ 处理/ 文本处理/ 不可/ 或缺/ 不可或缺/ 的/ 一步/ !

     

    1.精确模式:将句子最精确的分开,适合文本分析

    2.全模式:将句,子中所有可以成词的词语都扫描出来,速度快,但不能解决歧义

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

    注意:jieba.cut返回的结构是一个可迭代的生成器(关于Python生成器的知识见下一篇文章),需用for循环来获得分词后得到的每一个词语。如果需要分词的句子较短,我们希望得到一个list,则可以用jiaba.lcut函数来实现,它对cut的结果做了封装,l代表list,返回一个list集合。

    sent = '中文分词是文本处理不可或缺的一步!'
    seg_list = jieba.cut(sent,cut_all=False)
    print(seg_list)
    
    <generator object Tokenizer.cut at 0x07C68F00>
    
    sent = '中文分词是文本处理不可或缺的一步!'
    seg_list = jieba.lcut(sent,cut_all=False)
    print(seg_list)
    
    ['中文', '分词', '是', '文本处理', '不可或缺', '的', '一步', '!']

    二、获取词性

    词性属于词汇的语法范畴,也被称为词类。词性标注是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程。下演示用jieba.posseg模块实现词性标注

    sent = '中文分词是文本处理不可或缺的一步!'
    #用lcut生成列表
    import jieba.posseg as psg
    print([(x.word,x.flag) for x in psg.lcut(sent)])
    
    [('中文', 'nz'), ('分词', 'n'), ('是', 'v'), ('文本处理', 'n'), ('不可或缺', 'l'), ('的', 'uj'), ('一步', 'm'), ('!', 'x')]
    
    #用cut生成器
    seg_list = psg.cut(sent)
    print(' '.join(['{0}/{1}'.format(w,t) for w,t in seg_list]))
    
    中文/nz 分词/n 是/v 文本处理/n 不可或缺/l 的/uj 一步/m !/x

     

    展开全文
  • jieba 分词

    2016-08-16 17:58:36
    组件只提供jieba.cut 方法用于分词 cut方法接受两个输入参数:  第一个参数为需要分词的字符串  cut_all参数用来控制分词模式 待分词的字符串可以是gbk字符串、utf-8字符串或者unicode jieba.cut返回的结构是一个...
  • 文章目录jieba分词jieba分词jieba分词的基本思路案例:流程介绍 jieba分词 jieba分词 jieba分词是python写成的一个算是工业界的分词开源库,其github地址为:https://github.com/fxsjy/jieba,在Python里的安装方式...

    jieba分词

    jieba分词

    jieba分词是python写成的一个算是工业界的分词开源库,其github地址为:https://github.com/fxsjy/jieba,在Python里的安装方式: pip install jieba

    简单示例:

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

    执行结果:

    全模式:/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
    精确模式:/ 来到/ 北京/ 清华大学
    默认模式:/ 来到// 网易/ 杭研/ 大厦
    搜索引擎模式: 小明/ 硕士/ 毕业// 中国/ 科学/ 学院/ 科学院/ 中国科学院/ 计算/ 计算所//// 日本/ 京都/ 大学/ 日本京都大学/ 深造
    

    jieba分词的基本思路

    jieba分词对已收录词和未收录词都有相应的算法进行处理,其处理的思路很简单,主要的处理思路如下:

    • 加载词典dict.txt
    • 从内存的词典中构建该句子的DAG(有向无环图)
    • 对于词典中未收录词,使用HMM模型的viterbi算法尝试分词处理
    • 已收录词和未收录词全部分词完毕后,使用dp寻找DAG的最大概率路径 输出分词结果

    案例:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import jieba
    import requests
    from bs4 import BeautifulSoup
    
    def extract_text(url):
        # 发送url请求并获取响应文件
        page_source = requests.get(url).content
        bs_source = BeautifulSoup(page_source, "lxml")
    
        # 解析出所有的p标签
        report_text = bs_source.find_all('p')
    
        text = ''
        # 将p标签里的所有内容都保存到一个字符串里
        for p in report_text:
            text += p.get_text()
            text += '\n'
    
        return text
    
    def word_frequency(text):
        from collections import Counter
        # 返回所有分词后长度大于等于2 的词的列表
        words = [word for word in jieba.cut(text, cut_all=True) if len(word) >= 2]
    
        # Counter是一个简单的计数器,统计字符出现的个数
        # 分词后的列表将被转化为字典
        c = Counter(words)
    
        for word_freq in c.most_common(10):
            word, freq = word_freq
            print(word, freq)
    
    if __name__ == "__main__":
        url = 'http://www.gov.cn/premier/2017-03/16/content_5177940.htm'
        text = extract_text(url)
        word_frequency(text)
    

    执行结果:

    Building prefix dict from the default dictionary ...
    Loading model from cache /var/folders/dp/wxmmld_s7k9gk_5fbhdcr2y00000gn/T/jieba.cache
    Loading model cost 0.843 seconds.
    Prefix dict has been built succesfully.
    发展 134
    改革 85
    经济 71
    推进 66
    建设 59
    社会 49
    人民 47
    企业 46
    加强 46
    政策 46
    
    流程介绍
    1. 首先,我们从网上抓取政府工作报告的全文。我将这个步骤封装在一个名叫extract_text的简单函数中,接受url作为参数。因为目标页面中报告的文本在所有的p元素中,所以我们只需要通过BeautifulSoup选中全部的p元素即可,最后返回一个包含了报告正文的字符串。
    2. 然后,我们就可以利用jieba进行分词了。这里,我们要选择全模式分词。jieba的全模式分词,即把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。之所以这么做,是因为默认的精确模式下,返回的词频数据不准确。
    3. 分词时,还要注意去除标点符号,由于标点符号的长度都是1,所以我们添加一个len(word) >= 2的条件即可。
    4. 最后,我们就可以利用Counter类,将分词后的列表快速地转化为字典,其中的键值就是键的出现次数,也就是这个词在全文中出现的次数。

    Copyright © BigCat all right reserved,powered by Gitbook「Revision Time: 2017-04-27 00:22:49」

    展开全文
  • jieba分词jieba分词jieba.NET-master.zip

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,961
精华内容 2,384
关键字:

jieba分词