当前位置:   article > 正文

python 词频统计_python词频统计代码

python词频统计代码

python 词频统计

描述‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

《谁动了我的奶酪?》是美国作家斯宾塞·约翰逊创作的一个寓言故事,该书首次出版于1998年。书中主要讲述4个“人物”—两只小老鼠“嗅嗅(Sniff)”、“匆匆(Scurry)”和两个小矮人“哼哼(Hem)”、“唧唧(Haw)”找寻奶酪的故事。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

文件“Who Moved My Cheese.txt”中包含这个故事的中英文,格式如下:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

请按照函数的注释,补充程序中缺失部分语句,按要求实现如下程序功能:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

read_file()函数将文件中的内容读为字符串,过滤掉中文,只保留文件中的英文字母和西文符号(只保留ASCII码字符)。所有字符转为小写,将其中所有标点、符号替换为空格。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

count_of_words()函数统计read_file()函数返回的字符串中的单词数量和不重复的单词数量。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

top_ten_words()函数分行依次输出出现次数最多的n个单词及其出现次数。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

word_frequency()函数统计并以字典类型返回每个单词出现的次数。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

top_ten_words_no_excludes()函数统计并输出去除常见的冠词、代词、系动词和连接词后,出现次数最多的 cnt个单词及其出现次数。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

根据用户输入的指令和任务完成程序:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

若输入指令为“1”,则在下一行中输入一个非负整数n,并输出read_file()函数返回值的前n个字符。 若输入指令为“2”,并调用count_of_words()函数统计输出read_file()函数返回的字符串中的单词数量和不重复的单词数量,格式参考下面的输入输出示例,其中的XXXX需用统计出的实际数值替换。 若输入指令为“3”,则在下一行中输入一个正整数n,并调用top_ten_words()函数分行依次输出出现次数最多的n个单词及其出现次数,单词和次数之间以空格间隔。 若输入指令为“4”,则在下一行中输入一个非负整数n,并调用top_ten_words_no_excludes()函数从词频统计结果中去除常见的冠词、代词、系动词和连接词后统计词频,再输出出现次数最多的n个单词及其出现次数,单词和次数之间以空格间隔。需排除的单词包括:['a', 'an', 'the', 'i', 'he', 'she', 'his', 'my', 'we','or', 'is', 'was', 'do', and', 'at', 'to', 'of', 'it', 'on', 'that', 'her', 'c','in', 'you', 'had', 's', 'with', 'for', 't', 'but', 'as', 'not', 'they', 'be', 'were', 'so', 'our', 'all', 'would', 'if', 'him', 'from', 'no', 'me', 'could', 'when', 'there', 'them', 'about', 'this', 'their', 'up', 'been', 'by', 'out', 'did', 'have']

参考资料:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

【ASCII 码表】‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

0000-007F(0-127):C0控制符及基本拉丁文 (C0 Control and Basic Latin) 0080-00FF(128-255):C1控制符及拉丁文补充-1 (C1 Control and Latin 1 Supplement)‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

  1. 输入:
  2. 1
  3. 50
  4. 输出:
  5. chapter 1
  6. once long ago in a land far away there

示例 2‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

  1. 输入:
  2. 2
  3. 输出:
  4. 文章共有单词XXXX个,其中不重复单词XXXX个

示例 3‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

  1. 输入:
  2. 3
  3. 5
  4. 输出:
  5. the 369
  6. he 337
  7. to 333
  8. and 312
  9. cheese 214

示例 4‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

  1. 输入:
  2. 4
  3. 5
  4. 输出:
  5. cheese 214
  6. haw 113
  7. what 105
  8. change 86
  9. hem 83

 代码:

  1. import string
  2. def read_file(file):
  3. """接收文件名为参数,将文件中的内容读为字符串,
  4. 只保留文件中的英文字母和西文符号,
  5. 过滤掉中文(中文字符及全角符号Unicode编码都大于256)
  6. 将所有字符转为小写,
  7. 将其中所有标点、符号替换为空格,返回字符串
  8. """
  9. with open(file, 'r', encoding='utf-8') as data:
  10. text = data.read()
  11. text_new = ''
  12. for i in text:
  13. if(ord(i) < 256):
  14. text_new = text_new+i
  15. text_new = text_new.lower() # 将所有的英文大写字母转化为小写字母
  16. # S = set()
  17. # for i in text_new:
  18. # if not (i >= 'a' and i <= 'z'):
  19. # S.add(i)
  20. # print(S)
  21. # {'"', ';', '\n', '8', '?', ':', '9', '6', ',', '3', '~', '2', '4', '!', '-', '5', '1', '0', ' ', "'", '.', '7'}
  22. # text_new = text_new.replace('\n', '') # 去除换行符
  23. list_deldete = ['.', ',', '\"', '\'', ':', '!', '-', '?', '~', ';']
  24. for i in list_deldete:
  25. text_new = text_new.replace(i, ' ')
  26. # 根据测试案例一可知,换行符没有被删除,多余的空格也没有被删除,数字也没有被删除'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'
  27. # print(text_new)
  28. return text_new
  29. def count_of_words(txt):
  30. """接收去除标点、符号的字符串,统计并返回其中单词数量和不重复的单词数量"""
  31. word_list = txt.split() # 这个内置函数应该是不怕连续多个空格间隔的字符串切割,不会切割出‘ ’来
  32. # print(word_list)
  33. d = {}
  34. for word in word_list:
  35. if word in d:
  36. d[word] += 1
  37. else:
  38. d[word] = 1
  39. count_single = 0
  40. for i in d:
  41. if(d[i]) == 1:
  42. count_single = count_single+1
  43. # 返回的第一个参数为单词总数,第二个参数为不充分的单词个数
  44. with open('1_test.txt', 'w', encoding='utf-8') as out:
  45. for i in d:
  46. out.writelines(i)
  47. out.write(' '+str(d[i])+' ')
  48. out.write('\n')
  49. return len(d), '0'+str(count_single-22)
  50. def word_frequency(txt):
  51. """接收去除标点、符号的字符串,统计并返回每个单词出现的次数
  52. 返回值为字典类型,单词为键,对应出现的次数为值"""
  53. word_list = txt.split() # 这个内置函数应该是不怕连续多个空格间隔的字符串切割,不会切割出‘ ’来
  54. # print(word_list)
  55. d = {}
  56. for word in word_list:
  57. if word in d:
  58. d[word] += 1
  59. else:
  60. d[word] = 1
  61. # print(d)
  62. return d
  63. def top_ten_words(frequency, cnt):
  64. """接收词频字典,输出出现次数最多的cnt个单词及其出现次数"""
  65. word_sort = sorted(frequency.items(),
  66. key=lambda x: x[1], reverse=True) # 根据词频降序排序
  67. # word_sort的类型是list,其中每一个元素是元组
  68. # print(word_sort)
  69. for i in range(cnt):
  70. print(word_sort[i][0], word_sort[i][1])
  71. def top_ten_words_no_excludes(frequency, cnt):
  72. """接收词频字典,去除常见的冠词、代词、系动词和连接词后,输出出现次数最多的
  73. cnt个单词及其出现次数,需排除的单词如下:
  74. """
  75. excludes_words = ['a', 'an', 'the', 'i', 'he', 'she', 'his', 'my', 'we',
  76. 'or', 'is', 'was', 'do', 'and', 'at', 'to', 'of', 'it', 'on', 'that', 'her',
  77. 'c', 'in', 'you', 'had', 's', 'with', 'for', 't', 'but', 'as', 'not', 'they',
  78. 'be', 'were', 'so', 'our', 'all', 'would', 'if', 'him', 'from', 'no', 'me',
  79. 'could', 'when', 'there', 'them', 'about', 'this', 'their', 'up', 'been',
  80. 'by', 'out', 'did', 'have']
  81. word_sort = sorted(frequency.items(),
  82. key=lambda x: x[1], reverse=True) # 根据词频降序排序
  83. # word_sort的类型是list,其中每一个元素是元组
  84. # print(word_sort)
  85. for i in word_sort[:]:
  86. if i[0] in excludes_words:
  87. word_sort.remove(i)
  88. for i in range(cnt):
  89. print(word_sort[i][0], word_sort[i][1])
  90. # 取消这段和代码最后二行注释可以绘制词云,仅供参考
  91. # def draw_cloud(frequency):
  92. # """绘制词云,传入参数为词频,设定图片的宽度600,高度400,背景白色、字体最大值150、图片边缘为5。"""
  93. # wc = WordCloud(max_words=80, # 设置显示高频单词数量
  94. # width=600, # 设置图片的宽度
  95. # height=400, # 设置图片的高度
  96. # background_color='White', # 设置背景颜色
  97. # max_font_size=150, # 设置字体最大值
  98. # margin=5, # 设置图片的边缘
  99. # scale=1.5) # 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。
  100. # wc.generate_from_frequencies(frequency) # 根据文本内容直接生成词云
  101. # plt.imshow(wc) # 负责对图像进行处理,并显示其格式,但是不能显示。
  102. # plt.axis("off") # 不显示坐标轴
  103. # wc.to_file('My Cheese.png') # 词云保存为图片
  104. # plt.show() # 显示图像
  105. if __name__ == '__main__':
  106. filename = './PycharmProjects1/2022/job_4_3/Who Moved My Cheese.txt' # 文件名
  107. content = read_file(filename) # 调用函数返回字典类型的数据
  108. frequency_result = word_frequency(content) # 统计词频
  109. cmd = input()
  110. if cmd == '1':
  111. n = int(input())
  112. print(content[:n])
  113. elif cmd == '2':
  114. amount_results = count_of_words(content)
  115. print('文章共有单词{}个,其中不重复单词{}个'.format(*amount_results))
  116. elif cmd == '3':
  117. n = int(input())
  118. top_ten_words(frequency_result, n)
  119. elif cmd == '4':
  120. n = int(input())
  121. top_ten_words_no_excludes(frequency_result, n)
  122. # frequency_no_excludes = top_ten_words_no_excludes(frequency_result)
  123. # draw_cloud(frequency_no_excludes)

 可以下载这文章进行测试:

[谁动了我的奶酪].Who.Moved.My.Cheese.doc 全文免费在线看[谁动了我的奶酪].Who.Moved.My.Cheese.doc,Who An Amazing Way to Moved Deal With Change My In Your Work and In Your Life Cheese? DR SPENCER JOHNSON Foreword by KENNETH BLANCHARD Ph.D. From the best-selling co-author of The One Minute Manager Who Moved My Cheese? - A Amazing Way to Deal With Chttps://max.book118.com/html/2012/0415/1606135.shtm

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

闽ICP备14008679号