zoukankan      html  css  js  c++  java
  • jieba中文分词

     

    jieba中文分词

     

    中文与拉丁语言不同,不是以空格分开每个有意义的词,在我们处理自然语言处理的时候,大部分情况下,词汇是对句子和文章的理解基础。因此需要一个工具去把完整的中文分解成词。

    jieba是一个分词起家的中文工具。

     

    基本分词函数与用法

     

    安装:pip install jieba(全自动安装方式成功,其他安装方式未尝试)

    函数:

    jieba.cut()三个参数

    :需要分词的字符串
    :cut_all参数用来控制是否采用全模式,默认是精确模式
    :HMM参数用来控制是否使用HMM模型
    

    jieba.cut_for_search()两个参数

    :需要分词的字符串
    :是否使用HMM模型
    

    都返回一个可迭代的generator,可用for循环来遍历

    In [1]:
    import jieba
    
    #全模式
    jieba_list = jieba.cut("自然语言学习使我快乐",cut_all = True)
    print(jieba_list)
    print("Full Mode: " + "/".join(jieba_list))
    #精确模式
    jieba_list = jieba.cut("自然语言学习使我快乐",cut_all = False)
    print("Default Mode: " + "/".join(jieba_list))
    
    jieba_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在哈佛大学深造")
    print(",".join(jieba_list))
    
     
    Building prefix dict from the default dictionary ...
    Loading model from cache C:Users12502AppDataLocalTempjieba.cache
    
     
    <generator object Tokenizer.cut at 0x0000023A5F7A73B8>
    
     
    Loading model cost 1.282 seconds.
    Prefix dict has been built succesfully.
    
     
    Full Mode: 自然/自然语言/语言/语言学/学习/使/我/快乐
    Default Mode: 自然语言/学习/使/我/快乐
    小明,硕士,毕业,于,中国,科学,学院,科学院,中国科学院,计算,计算所,,,后,在,哈佛,大学,哈佛大学,深造
    
    In [2]:
    result_lcut = jieba.lcut("小明硕士毕业于中国科学院计算所,后在哈佛大学深造")
    print(result_lcut)
    #精确模式
    print(" ".join(result_lcut))
    #全模式
    print(" ".join(jieba.lcut_for_search("小明硕士毕业于中国科学院计算所,后在哈佛大学深造")))
    
     
    ['小明', '硕士', '毕业', '于', '中国科学院', '计算所', ',', '后', '在', '哈佛大学', '深造']
    小明 硕士 毕业 于 中国科学院 计算所 , 后 在 哈佛大学 深造
    小明 硕士 毕业 于 中国 科学 学院 科学院 中国科学院 计算 计算所 , 后 在 哈佛 大学 哈佛大学 深造
    
     

    添加用户自定义词典

     

    很多时候我们需要针对特殊场景进行分词,会有一些领域内的专有词汇。

    1.可以用jieba.load_userdict(file_name)加载用户字典
    2.少量的词汇可以手动添加
        用add_word(word,freq = None,tag = None)和del_word(word)在程序中动态修改词典;
        用suggest_freq(segment,tune = True)可调节单个词语的词频,使其能或不能被分出来。
    In [3]:
    print('/'.join(jieba.cut('安妮我不能失去你。',HMM = False)))
    
     
    安妮/我/不能/失去/你/。
    
    In [4]:
    jieba.suggest_freq(('不','能'),True)
    
    Out[4]:
    558
    In [5]:
    print('/'.join(jieba.cut('安妮我不能失去你。',HMM=False)))
    
     
    安妮/我/不/能/失去/你/。
    
     

    关键词提取

     

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

     

    import jieba.analyse

    jieba.analyse.extract_tags(sentence,topK = 20,withWeight = False,allowPOS=())  
        sentence:为待提取的文本
        topK:为返回几个TF/IDF权重最大的关键词,默认值为20
        withWeight:为是否一并返回关键词权重值,默认为FALSE
        allowPOS:仅包括指定词性的词,默认为空
    In [6]:
    import jieba.analyse as analyse
    lines = open('校园女神.txt','rb').read()
    print(" ".join(analyse.extract_tags(lines,topK=20,withWeight=False,allowPOS=())))
    
     
    李子 花样滑冰 短道 女神 2016 吉林大学 滑冰 陪伴 锦标赛 夺得 体育 非常 心态 成绩 速滑队 阳光 赵宏博 学院 读研 如仙
    
    In [7]:
    lines = open('西游记.txt','rb').read()
    print(' '.join(analyse.extract_tags(lines,topK = 20,withWeight = False,allowPOS=())))
    
     
    行者 八戒 师父 三藏 唐僧 大圣 沙僧 妖精 菩萨 和尚 那怪 那里 长老 呆子 徒弟 怎么 不知 老孙 国王 一个
    
     

    基于TextRank算法的关键词抽取

     

    jieba.anlayse.textrank(sentence,topK = 20,withWight = False,allowPOS = ('ns','n','vn','v'))直接使用,接口相同,注意默认过滤词性。

    In [12]:
    import jieba.analyse as analyse
    lines = open('校园女神.txt',"rb").read()
    print(" ".join(analyse.textrank(lines,topK=20,withWeight=False,allowPOS=('n','ns','vn','v'))))
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    print(" ".join(analyse.textrank(lines,topK=20,withWeight=False,allowPOS=('n','ns'))))
    
     
    花样滑冰 中国 女神 花滑 夺得 学院 陪伴 作为 称号 活出 女儿 天赋 锦标赛 世界 拥有 运动健将 物和人 考到 感谢 体育
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    花样滑冰 花滑 称号 女神 中国 锦标赛 世界 学院 研究生 硕士 陪伴 人生 学业 心态 物和人 体坛 内心 傲人 运动健将 身体
    
     

    词性标注

     

    jieba.posseg.POSTokenizer(tokenizer=None)新建自定义分词器,tokenizer参数可指定内部使用jieba.Tokenizer分词器。

    jieba.posseg.dt为默认磁性标注分词器。 标注句子分词后每个词的词性,采用和ictclas兼容的标记法

    In [14]:
    import jieba.posseg as pseg
    words = pseg.cut("一眼望不到边")
    for word,flag in words:
        print('%s%s'%(word,flag))
    
     
    一眼 m
    望 v
    不到 v
    边 d
    
     

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

    In [15]:
    ###输入参数只接受Unicode###
    print("默认模式的tokenize")
    result = jieba.tokenize(u'自然语言处理非常有用')
    for tk in result:
        print('%s		 start:%d		 end:%d'%(tk[0],tk[1],tk[2]))
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    print("搜索模式的tokenize")
    result = jieba.tokenize(u'自然语言处理非常有用',mode='search')
    for tk in result:
        print('%s		 start:%d		 end:%d'%(tk[0],tk[1],tk[2]))
    
     
    默认模式的tokenize
    自然语言		 start:0 		 end:4
    处理		 start:4 		 end:6
    非常		 start:6 		 end:8
    有用		 start:8 		 end:10
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    搜索模式的tokenize
    自然		 start:0 		 end:2
    语言		 start:2 		 end:4
    自然语言		 start:0 		 end:4
    处理		 start:4 		 end:6
    非常		 start:6 		 end:8
    有用		 start:8 		 end:10
    
    Monkey
  • 相关阅读:
    gcc编译代码报错及编译方式
    YUV到RGB的转换
    YUV和RGB格式分析
    v4l2的学习建议和流程解析
    在Ubuntu下安装imx6linux系统的交叉编译环境遇到的问题总结
    《赢在测试2》--读书笔记
    关于javascript的slice方法
    数字的千分位格式化方法
    javascript开发中的封装模式(转)
    防止表单重复提交的几种方法
  • 原文地址:https://www.cnblogs.com/monkeyT/p/10661713.html
Copyright © 2011-2022 走看看