当前位置:   article > 正文

jieba库(jieba库的介绍以及分词原理,jieba的三种模式和常用函数,利用Jieba模块进行中文词语的统计)

jieba

环境:  Python3.6 +  windows10

jieba介绍以及分词的原理

1. jieba 是Python中的优秀的中文分词第三方库

    --中文文本需要通过分词获得单个的词语

2. jieba 库提供三种分词模式 ,最简单只需要掌握一个函数

3.jieba库的安装

   只需要在cmd 中,   pip  install jieba     

4.. jieba分词的原理    

        通过中文词库的方式来识别分词的

        -- 利用一个中文词库,确定汉字之间的关联概率

       -- 通过计算汉字之间的概率,汉字间概率大的组成词组,形成分词结果

       -- 除了分词,用户还可以添加自定义的词组

 jieba的三种模式以及函数介绍

 1.jieba分词的三种模式     

      精确模式 : 把文本精确的切分开,不存在冗余单词   (就是切分开之后一个不剩的精确组合) 常用

     全模式 : 把文本中所有可能的词语都扫描出来,有冗余

                  即: 可能有一个文本,可以从不同的角度来切分,变成不同的词语。在全模式下把不同的词语都挖掘出来

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

2. jieba库的常用函数

   (1)精确模式 函数  jieba.lcut(str)     返回列表类型

  1. import jieba
  2. """jieba.lcut(str)"""
  3. s = "中国是一个伟大的国家"
  4. print(jieba.lcut(s))
  5. """
  6. 输出结果: ['中国', '是', '一个', '伟大', '的', '国家']
  7. """

  (2)全模式    jieba.lcut(str,cut_all=True)     返回列表类型 ,有冗余

  1. print(jieba.lcut(s,cut_all=True))
  2. """输出结果:['中国', '国是', '一个', '伟大', '的', '国家']"""

(3) 搜索引擎模式: jieba.lcut_for_search(str)  返回列表类型,有冗余

     先按照精确模式进行分词,然后把把比较长的词进行再次分词

  1. s1 = "中华人民共和国是伟大的"
  2. print(jieba.lcut_for_search(s1))
  3. '''
  4. 输出结果 : ['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']
  5. '''

(4) jieba.add_word(str)   向分词词典添加新词 str

 

 jieba使用实例

文本词频的统计 :  一篇文章中,出现了哪些词?哪些词出现的最多?

 1. 首先是英文文本 ,对照英文的分词,进行中文分词   用到的英文文本的网站   网站的文本赋全部赋值下来,然后进行保存,: https://python123.io/resources/pye/hamlet.txt

  1. def getText():
  2. txt = open("E:\\\shuju\\hamelet.txt", "r").read()
  3. # 文章中的所有单词转化为小写
  4. txt = txt.lower()
  5. # 使用空格个来替换掉所有的符号
  6. for ch in "!\"#$%&()*+,-./:;<>=?@[\\]_'{|}~":
  7. txt = txt.replace(ch, " ")
  8. return txt
  9. def main():
  10. hamletTxt = getText()
  11. words = hamletTxt.split()
  12. counts = {}
  13. for word in words:
  14. # 获取键对应的值,如果键不存在,给出默认值0
  15. # 获取 每个单词出现的次数
  16. counts[word] = counts.get(word, 0) + 1
  17. # 把字典的键值对转化为元组,全部存放在列表里面
  18. items = list(counts.items())
  19. # 进行排序,按照每个元组的第二个值,即字典的值,进行降序排序
  20. items.sort(key=lambda x:x[1],reverse=True)
  21. # 对降序排序的前10个进行处理,
  22. # 格式化输出 : word: 最低长度为10,不够补空格 counts: 最低长度为5,不够的话补空格
  23. # print(items)
  24. for i in range(10):
  25. word,counts = items[i]
  26. print("{0:<10}{1:>5}".format(word,counts))
  27. if __name__ == '__main__':
  28. main()

运行结果:

  1. the 1143
  2. and 966
  3. to 762
  4. of 669
  5. i 631
  6. you 554
  7. a 546
  8. my 514
  9. hamlet 471
  10. in 451

2.中文的文本进行分析,和英文的相比不同,中文中的有名称、词语成语等

   现在只统计三国演义中的人物的出现次数,取出排行前10的人物出现的次数

    中文的文本网站: 三国演义的片段文本: https://python123.io/resources/pye/threekingdoms.txt

   详细看代码的注释

  1. """人物出场统计"""
  2. import jieba
  3. # 读取所有的文件
  4. txt = open("E:\\shuju\\threekingdoms.txt","r",encoding="utf-8").read()
  5. # 使用jieba分词的精确模式
  6. words = jieba.lcut(txt)
  7. counts = {}
  8. '''对进行分词的之后的结果进行处理,解决类似于孔明和诸葛亮是一个人物的问题,给其重新赋值'''
  9. for word in words:
  10. # 排除长度为1的
  11. if len(word) == 1:
  12. continue
  13. elif word == "诸葛亮" or word == "孔明曰":
  14. rword = "孔明"
  15. elif word == "关公" or word == "云长":
  16. rword = "关羽"
  17. elif word == "玄德" or word == "玄德曰":
  18. rword = "刘备"
  19. elif word == "孟德" or word == "丞相":
  20. rword = "曹操"
  21. elif word == "周瑜" or word == "都督":
  22. rword = "周瑜"
  23. else:
  24. rword = word
  25. # 统计出场的次数
  26. counts[rword] = counts.get(rword,0) + 1
  27. '''因为分词之后,可能不是人物的词要比人物的次数多,
  28. 所以进行处理,如果统计的结果里面出现了不是人物的结果,
  29. 就对其进行删除,可以先不进行处理,看看会出现哪些值,
  30. 然后把这些值放在一个集合里面,然后可以进行相应的删除
  31. 多次进行运行,然后添加之后,就可以得到想要的结果'''
  32. excludes = {"将军","却说","二人","不可","荆州","不能","如此","商议","如何","主公",
  33. "军士","左右","军马","引兵","次日","大喜","东吴","天下","于是","今日",
  34. "不敢","魏兵","陛下","不知","一人","人马","汉中","只见","众将","后主",
  35. "大叫","上马","蜀兵"}
  36. for ex in excludes:
  37. del counts[ex] # 删除不是人物的值
  38. items = list(counts.items())
  39. # 安装从大到小进行排序
  40. items.sort(key=lambda x:x[1],reverse=True)
  41. # 只要前排序时候出场次数最多的前10个
  42. for i in range(10):
  43. word,count = items[i]
  44. print("{0:<10}{1:>5}".format(word,count))

运行结果:

  1. 曹操 1451
  2. 孔明 1383
  3. 刘备 1252
  4. 关羽 784
  5. 周瑜 438
  6. 张飞 358
  7. 吕布 300
  8. 赵云 278
  9. 孙权 264
  10. 司马懿 221

3.同样的道理,我们可以进行西游记等,还有其他的中文文本的统计,

    还有中文的期刊。新闻等,都是可以进行统计的。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号