LMT.czj 2024-12-11 13:23 采纳率: 82.4%
浏览 62
已结题

词频统计之《哈姆雷特》Python

Hamlet《哈姆雷特》是莎士比亚的一部经
典悲剧作品。这里提供了该故事的文本文
件:hamlet.txt。
请统计该文件中出现英文的词频,按照如下
格式打印输出前10个高频词语:
the ,1138
即:英文单词
(左对齐,宽度为10)+逗号+词语出现的频率(右对齐,宽度为5)
要求与说明:
1.标点符号及组合不算作英文词语,去除的
标点及特殊符号如下!"#$%&()*+,-./:;<=>?
2.同一单词的各种大小写形式记作一个词.
如The和the相同
3.在程序中,请使用文件名打开文件:
hamlet.txt


f = open("hamlet.txt","r")
f.close()
  • 写回答

1条回答 默认 最新

  • 越重天 新星创作者: Java技术领域 2024-12-13 12:22
    关注

    本答案参考多次询问ChatGPT-3.5后选择的最佳回答,若是满意,还请采纳,谢谢。

    import string
    
    def process_file():
        word_count = {}
        with open('hamlet.txt', 'r') as f:
            for line in f:
                line = line.translate(str.maketrans('', '', string.punctuation))
                line = line.lower()
                words = line.split()
                for word in words:
                    if word not in word_count:
                        word_count[word] = 1
                    else:
                        word_count[word] += 1
        items = list(word_count.items())
        items.sort(key=lambda x: x[1], reverse=True)
        for i in range(10):
            word, count = items[i]
            print(f"{word:<10},{count:>5}")
    
    
    if __name__ == '__main__':
        process_file()
    
    

    在上述代码中:

    1. 首先定义了process_file函数,在函数内部,首先创建了一个空的字典word_count用于存储单词和其出现的频率。
    2. 然后打开hamlet.txt文件,对于文件中的每一行,先去除标点符号(通过translate方法结合string.punctuation),再转换为小写字母,然后将每行分割成单词列表。
    3. 对于每个单词,如果不在word_count字典中,则将其加入字典且计数为1,否则将其计数加1。
    4. 之后将字典转换为包含元组(单词,计数)的列表items,并按照计数从大到小排序。
    5. 最后取前10个元素,按照要求的格式打印输出。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月11日