文件词频统计--Hamlet

项目场景:

Python练习题

问题描述:

提示:这里描述项目中遇到的问题:

请统计hamlet.txt文件中出现的英文单词情况,统计并输出出现最多的前n个单词,注意:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

(1) 单词不区分大小写,即需将大写转换成小写;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

(2) 请在文本中剔除如下特殊符号:!"#$%&()*+,-./:;<=>?@[\]^_‘{|}~‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

(3) 输出10个单词和其出现次数,每个单词一行;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

(4) 输出单词为小写形式。

此题不涉及编码转换,若想指定编码 可在开始加上

#-- coding: utf-8 --

或 在文件打开处 指定编码

with open(“hamlet.txt”, “r”, encoding=‘utf-8’) as f:

 ........

 ........

在这里插入图片描述


原因分析:

提示:这里填写问题的分析:

题目要求从文件中读取一篇文章,然后统计输出文章中最常出现的10个单词以及次数,从思路上来看,词频统计就是一个累加问题,对文章中的每一个词设计一个相应的计数器,每个单词出现一次就进行加一。采用什么数据类型就成为我们思考的地方,如果我们以词语为键,计数器为值,会构成一个<单词>.<次数>的键值对,可以很好的解决该问题。首先我们先获取文章的单词,并且将大写字母改为小写,同时去掉特殊字符,就得了我们想要的数据,然后对每个数据进行计数,假设将单词保存在word中,使用一个字典类型count = {},如果出现一次,将相应的值加1即可,最后排序,格式化输出即可


解决方案:

提示:这里填写该问题的具体解决方案:

def gettest():
    txt = open("hamlet.txt", 'r').read()
    txt = txt.lower()
    for ch in '!\"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt = txt.replace(ch, ' ')
    return txt

hamelet = gettest()
words = hamelet.split()
count = {
    
    }
n = eval(input())
num = 0
for word in words:
    count[word] = count.get(word, 0) + 1
items = list(count.items())
items.sort(key=lambda x: x[1], reverse=True)
for i in range(10):
    num += 1
    word, count = items[i]
    if num > n:
        break
    print("{0:<10}{1:>5}".format(word, count))

おすすめ

転載: blog.csdn.net/qq_53144843/article/details/121120722