文件词频统计--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))
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,我会用中文回复。要统计hamlet.txt文件中出现的英文单词情况,可以先读取文件,然后使用正则表达式或者其他方法提取出所有的英文单词。接着,可以使用Python中的字典来统计每个单词出现的次数,并按照出现次数从大到小排序。最后,输出出现最多的前n个单词即可。需要注意的是,统计单词时要考虑大小写,可以将所有单词转换为小写再进行统计。 ### 回答2: 要回答这个问题,我们需要借助编程语言来统计hamlet.txt文件中出现的英文单词情况。以下是一个Python代码示例: ``` import re from collections import Counter # 读取文件内容 with open('hamlet.txt', 'r') as f: text = f.read() # 去除标点符号和换行符 text = re.sub(r'[^\w\s]', '', text) text = re.sub(r'\n', ' ', text) # 将所有单词转为小写并按照空格分割 words = text.lower().split() # 统计单词出现次数 word_counts = Counter(words) # 输出出现最多的前n个单词 n = 10 top_n_words = word_counts.most_common(n) for word, count in top_n_words: print(word, count) ``` 上述代码首先读取hamlet.txt文件的内容,并使用正则表达式去除标点符号和换行符,接着将所有单词转换为小写并按照空格分割,最后使用collections模块中的Counter类来统计每个单词出现的次数,并输出出现最多的前n个单词。 需要注意的是,由于hamlet.txt文件中可能存在一些非英文单词,比如人名、地名等,因此统计出的单词数可能会略微偏高。此外,许多单词可能有不同的形式,如复数形式、时态形式等,但在本文中我们将它们视为不同的单词来统计。 ### 回答3: 要解决这个问题,我们需要进行以下步骤: 1. 读取hamlet.txt文件的内容,并将其转换为小写字母。这是因为我们不希望区分大小写。 2. 使用正则表达式将文本中的标点符号和数字删除。这将使我们只剩下英文单词。 3. 将文本分割成单词,并计算每个单词出现的次数。 4. 对出现次数进行排序,并输出前n个单词。 下面是使用Python实现上述步骤的代码: ``` import re # 步骤1:读取文件并转换为小写字母 with open('hamlet.txt', 'r') as f: text = f.read().lower() # 步骤2:删除标点和数字 text = re.sub('[^a-zA-Z]', ' ', text) # 步骤3:分割单词,并计算出现次数 words = text.split() word_freq = {} for word in words: if word not in word_freq: word_freq[word] = 0 word_freq[word] += 1 # 步骤4:对出现次数进行排序 sorted_words = sorted(word_freq.items(), key=lambda x: x[1], reverse=True) # 输出前n个单词 n = 10 for i in range(n): print(sorted_words[i][0], sorted_words[i][1]) ``` 这段代码将输出出现最多的前10个单词及其出现次数。根据需要,可以更改n的值来输出更多或更少的单词。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super.Bear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值