jieba分词

作者: 领悟悟悟 | 来源:发表于2018-02-24 16:35 被阅读311次

    参考:
    Python 中文分词组件 jiaba
    Python中文分词 jieba 十五分钟入门与进阶
    jieba完整文档
    $好玩的分词——python jieba分词模块的基本用法

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

    主要功能:

    1. 分词
    • jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型(是否开启HMM进行中文分词)
    • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
    • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语,或者用jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
    • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
    cut(self, sentence, cut_all=False, HMM=True)  # 默认精确模式
    cut_for_search(self, sentence, HMM=True) # 搜索引擎模式
    
        import jieba
        jieba.add_word('中国科学院')
    
        seg_list = jieba.cut("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", cut_all=False) # 精确模式
        print(" ".join(seg_list))
    
        seg_list = jieba.cut("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", cut_all=True) # 全模式
        print(" ".join(seg_list))
    
        seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") #搜索引擎模式
        print(" ".join(seg_list))
    
    小明 硕士 毕业 于 中国科学院 计算所 , 后 在 日本京都大学 深造
    小 明 硕士 毕业 于 中国 中国科学院 科学 科学院 学院 计算 计算所   后 在 日本 日本京都大学 京都 京都大学 大学 深造
    小明 硕士 毕业 于 中国 科学 学院 科学院 中国科学院 计算 计算所 , 后 在 日本 京都 大学 日本京都大学 深造
    note:
      全模式与搜索引擎模式下自己添加的词不起作用
    
    2. 添加自定义词典

    载入词典:

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

    官方范例:

    调整词典:

    • 使用 add_word(word, freq=None, tag=None)del_word(word) 可在程序中动态修改词典。
    • 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
    • 注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

    案例:

    seg_list = jieba.cut("我们中出了一个叛徒", cut_all=False) 
    print(" ".join(seg_list))
    
    jieba.del_word('中出')
    seg_list = jieba.cut("我们中出了一个叛徒", cut_all=False) 
    print(" ".join(seg_list))
    
    我们 中出 了 一个 叛徒
    我们 中 出 了 一个 叛徒
    
    jieba.add_word('中出')
    seg_list = jieba.cut("我们中出了一个叛徒", cut_all=False) 
    print(" ".join(seg_list))
    
    jieba.suggest_freq(('中','出'),tune=True)
    seg_list = jieba.cut("我们中出了一个叛徒", cut_all=False) 
    print(" ".join(seg_list))
    
    我们 中出 了 一个 叛徒
    我们 中 出 了 一个 叛徒
    
    seg_list = jieba.cut("我们中出了一个叛徒", cut_all=False) 
    print(" ".join(seg_list))
    
    jieba.suggest_freq('一个叛徒',tune=True)
    seg_list = jieba.cut("我们中出了一个叛徒", cut_all=False) 
    print(" ".join(seg_list))
    
    我们 中 出 了 一个 叛徒
    我们 中 出 了 一个叛徒
    
    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)文本语料库可以切换成自定义语料库的路径

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

    import jieba
    from jieba import analyse
    
    text_full_path = r'C:\Users\jjj\Desktop/123.txt' #设置要分析的文本路径
    text = open(text_full_path, encoding='utf-8').read()
    for key in analyse.extract_tags(text,50, withWeight=True):
    # 使用jieba.analyse.extract_tags()参数提取关键字,默认参数为50
        print(key)
        # 设置输出编码为utf-8不然在因为win下控制台默认中文字符集为gbk,所以会出现乱码
        # 当withWeight=True时,将会返回number类型的一个权重值(TF-IDF)
    
    
    基于 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 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 倍。

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

    附:结巴分词词性对照表(按词性英文首字母排序)

    形容词(1个一类,4个二类)
    • a 形容词

    • ad 副形词

    • an 名形词

    • ag 形容词性语素

    • al 形容词性惯用语

    区别词(1个一类,2个二类)
    • b 区别词

    • bl 区别词性惯用语

    连词(1个一类,1个二类)
    • c 连词

    • cc 并列连词

    副词(1个一类)
    • d 副词
    叹词(1个一类)
    • e 叹词
    方位词(1个一类)
    • f 方位词
    前缀(1个一类)
    • h 前缀
    后缀(1个一类)
    • k 后缀
    数词(1个一类,1个二类)
    • m 数词

    • mq 数量词

    名词 (1个一类,7个二类,5个三类)

    名词分为以下子类:

    • n 名词

    • nr 人名

    • nr1 汉语姓氏

    • nr2 汉语名字

    • nrj 日语人名

    • nrf 音译人名

    • ns 地名

    • nsf 音译地名

    • nt 机构团体名

    • nz 其它专名

    • nl 名词性惯用语

    • ng 名词性语素

    拟声词(1个一类)
    • o 拟声词
    介词(1个一类,2个二类)
    • p 介词

    • pba 介词“把”

    • pbei 介词“被”

    量词(1个一类,2个二类)
    • q 量词

    • qv 动量词

    • qt 时量词

    代词(1个一类,4个二类,6个三类)
    • r 代词

    • rr 人称代词

    • rz 指示代词

    • rzt 时间指示代词

    • rzs 处所指示代词

    • rzv 谓词性指示代词

    • ry 疑问代词

    • ryt 时间疑问代词

    • rys 处所疑问代词

    • ryv 谓词性疑问代词

    • rg 代词性语素

    处所词(1个一类)
    • s 处所词
    时间词(1个一类,1个二类)
    • t 时间词

    • tg 时间词性语素

    助词(1个一类,15个二类)
    • u 助词

    • uzhe 着

    • ule 了 喽

    • uguo 过

    • ude1 的 底

    • ude2 地

    • ude3 得

    • usuo 所

    • udeng 等 等等 云云

    • uyy 一样 一般 似的 般

    • udh 的话

    • uls 来讲 来说 而言 说来

    • uzhi 之

    • ulian 连 (“连小学生都会”)

    动词(1个一类,9个二类)
    • v 动词

    • vd 副动词

    • vn 名动词

    • vshi 动词“是”

    • vyou 动词“有”

    • vf 趋向动词

    • vx 形式动词

    • vi 不及物动词(内动词)

    • vl 动词性惯用语

    • vg 动词性语素

    标点符号(1个一类,16个二类)
    • w 标点符号

    • wkz 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <

    • wky 右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >

    • wyz 左引号,全角:“ ‘ 『

    • wyy 右引号,全角:” ’ 』

    • wj 句号,全角:。

    • ww 问号,全角:? 半角:?

    • wt 叹号,全角:! 半角:!

    • wd 逗号,全角:, 半角:,

    • wf 分号,全角:; 半角: ;

    • wn 顿号,全角:、

    • wm 冒号,全角:: 半角: :

    • ws 省略号,全角:…… …

    • wp 破折号,全角:—— -- ——- 半角:--- ----

    • wb 百分号千分号,全角:% ‰ 半角:%

    • wh 单位符号,全角:¥ $ £ ° ℃ 半角:$

    字符串(1个一类,2个二类)
    • x 字符串

    • xx 非语素字

    • xu 网址URL

    语气词(1个一类)
    • y 语气词(delete yg)
    状态词(1个一类)
    • z 状态词

    相关文章

      网友评论

      本文标题:jieba分词

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