📜  门| GATE-CS-2016(Set 2)|问题30(1)

📅  最后修改于: 2023-12-03 15:28:44.854000             🧑  作者: Mango

题目概述

本题为 GATE-CS-2016 (Set 2) 的第30题。考查了解程序的正则表达式、文件操作和数据结构的知识。题目要求实现一个程序,从给定的一个文件中读取字符串,统计其中包含的单词频率,并按照单词出现的频率从高到低进行排名,最终输出排名前10的单词及其出现频率。

解题思路

  1. 读取文件并将文件内容存入一个字符串中。
  2. 解析字符串,将所有单词提取出来。
  3. 统计每个单词出现的次数并存入一个字典中,键为单词,值为该单词出现的次数。
  4. 对统计结果按照单词出现的次数进行排序,选取前十个输出。

具体实现

读取文件并将文件内容存入一个字符串中
with open('filename.txt', 'r') as f:
    content = f.read()

以上代码将文件 'filename.txt' 中的内容读取到一个字符串变量 content 中。

解析字符串,将所有单词提取出来
import re
words = re.findall(r'\b\w+\b', content)

以上代码使用 Python 的正则表达式模块 re,提取字符串中的所有单词并存入列表 words 中。正则表达式 \b\w+\b 用来匹配单词,其中 \b 表示单词边界,\w+ 表示匹配一个或多个单词字符。

统计每个单词出现的次数并存入一个字典中
freq = {}
for word in words:
    freq[word] = freq.get(word, 0) + 1

以上代码使用字典 freq 来存储每个单词出现的次数。对字符串中的每个单词进行遍历,如果字典中已经存在该单词,将次数加一,否则将该单词添加到字典中并设置次数为1。

对统计结果按照单词出现的次数进行排序,选取前十个输出
top_words = sorted(freq.items(), key=lambda x: x[1], reverse=True)[:10]
for word, freq in top_words:
    print(word, freq)

以上代码使用 sorted 函数对字典 freq 进行排序,将结果存入列表 top_words 中。其中 key 参数指定按照频率进行排序。列表切片 [:10] 取出前十个元素,依次输出单词和出现频率即可。

总结

本题考查了正则表达式、文件操作和字典等知识,通过利用 Python 提供的相关模块,可以方便地实现该功能。掌握文件操作和数据结构的基本使用方法,可以更好地应对实际工作中遇到的问题。