当前位置:   article > 正文

python小案例_文本词频统计_print ("{0:{2}<10}出场次数:{1:{2}<5}".format(word, cou

print ("{0:{2}<10}出场次数:{1:{2}<5}".format(word, count,(chr(12288))))

目录

 

一、英文文本的统计

二、中文文本的统计


一、英文文本的统计

1、本例用 Hamet 文本,代码如下:

  1. def getText():
  2. txt = open("./data/hamlet.txt", "r").read() # 读取文件
  3. txt = txt.lower() # 把所有字母都变成小写,便于统计
  4. #将文本中特殊字符替换为空格
  5. for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
  6. txt = txt.replace(ch, " ")
  7. return txt
  8. hamletTxt = getText()
  9. words = hamletTxt.split() # 将文本用空格分隔
  10. counts = {}
  11. # 统计单词出现的次数
  12. for word in words:
  13. counts[word] = counts.get(word,0) + 1
  14. items = list(counts.items())
  15. # 排序,按单词出现的次数从大到小排好序
  16. items.sort(key=lambda x:x[1], reverse=True)
  17. # 打印出现次数前10 的单词
  18. for i in range(10):
  19. word, count = items[i]
  20. print ("{0:<10}{1:>5}".format(word, count))

2、统计结果如下

二、中文文本的统计

1、先简单介绍一下中文分词的第三方库 jieba(安装命令:pip install jieba)

  1)、jieba分词的原理

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

- 中文字符间概率大的组成词组,形成分词结果

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

2)、jieba分词的三种模式

- 精确模式:把文本精确的切分开,不存在冗余单词

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

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

3)、jieba库常用函数

  

函数 描述
jieba.lcut(s)

精确模式,返回一个列表类型的分词结果

>>>jieba.lcut("中国是一个伟大的国家")

['中国', '是', '一个', '伟大', '的', '国家']

jieba.lcut(s, cut_all=True)全模式,返回一个列表类型的分词结果,存在冗余
>>>jieba.lcut("中国是一个伟大的国家",cut_all=True)
['中国', '国是', '一个', '伟大', '的', '国家']
jieba.lcut_for_sear ch(s)

搜索引擎模式,返回一个列表类型的分词结果,存在冗余

>>>jieba.lcut_for_search(“中华人民共和国是伟大的")

['中华', '华人', '人民', '共和', '共和国', '中华人民共 和国', '是', '伟大', '的']

jieba.add_word(w)

向分词词典增加新词w

>>>jieba.add_word("蟒蛇语言")

 

2、本例用 《三国演义》文本,统计人物出场次数前十的,代码如下:

  1. import jieba #导入中文分词的库 jieba
  2. # 这些都不是文物的称号,但都是出现次数比较多的,需先列出来
  3. excludes = {"将军","却说","荆州","二人","不可","不能","如此","如何","左右","商议","主公",
  4. "军士","军马","引兵","次日","大喜","天下","东吴","于是","今日","不敢","魏兵",
  5. "陛下","一人","都督","人马","不知"}
  6. txt = open("./data/threekingdoms.txt", "r", encoding='utf-8').read() # 读取文件
  7. words = jieba.lcut(txt) # 用 jieba 库来中文分词
  8. # 用字典来存储,各个文物的出场次数
  9. counts = {}
  10. for word in words:
  11. if len(word) == 1:
  12. continue
  13. # 诸葛亮 和 孔明 是同一个人
  14. elif word == "诸葛亮" or word == "孔明曰":
  15. rword = "孔明"
  16. elif word == "关公" or word == "云长":
  17. rword = "关羽"
  18. elif word == "玄德" or word == "玄德曰":
  19. rword = "刘备"
  20. elif word == "孟德" or word == "丞相":
  21. rword = "曹操"
  22. else:
  23. rword = word
  24. counts[rword] = counts.get(rword,0) + 1
  25. # 不是人物就从字典里删除
  26. for word in excludes:
  27. del counts[word]
  28. # 将字典类型的数据转化为 list 类型
  29. items = list(counts.items())
  30. # 排序,按出现的次数从大到小排好序
  31. items.sort(key=lambda x:x[1], reverse=True)
  32. # 打印出现次数前10 的人物名字
  33. for i in range(10):
  34. word, count = items[i]
  35. t = "{0:{2}<10}{1:>5}"
  36. # chr(12288) 是中文字的空格
  37. print (t.format(word, count,chr(12288)))

 

3、运行结果如下:

若想要 Hamet 和 《三国演义》文本,可点击这里来下载(密码为:pvdv)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/109735
推荐阅读
相关标签
  

闽ICP备14008679号