从0开始学习python7:Python中词频统计以及sort的排序用法

本文介绍了一种使用Python字典统计文本中单词出现频率的方法,并展示了如何对这些频率进行排序,以便于进一步的数据分析和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

统计单词出现的次数可采用如下代码:

counts[word] = counts[word] + 1

当遇到一个新词是,则需要在字典中新建键值对:

counts[new_word] = 1

因此,无论是否在字典中,加入字典counts中的处理逻辑可以统一表示如下:

if word in counts:
    counts[wors] = counts[wors] + 1
else:
    count[word] = 1
  

或者,这个处理逻辑也可以简洁地表示为:

 counts[word] = counts.get(word,0) + 1

counts.get(word,0) + 1表示:如果word在counts中,则返回word对应的值,如果word不在counts中,则返回0.

接下来就是对刚刚词频统计的排序:

items = list(counts.items())             #将字典转化为列表
items.sort(key=lambda  x : x[1], reverse=True) 
#对列表第二列(原先的字典的值)进行从大到小的排序。reverse=False是从小到大排序
#其中,x也可以是其他的符号,如y、z都可以

<think>嗯,用户的问题是关于如何用Python对《哈姆雷特》进行词频统计。我需要根据提供的引用内容来构建一个清晰的步骤说明和示例代码。首先,用户可能对文本处理的基本流程不太清楚,所以得先分解步骤:获取文本、预处理、统计词频排序输出。 用户提供的引用中,引用2详细描述了处理步骤,包括读取文件、处理特殊符号、归一化、分割单词和使用字典统计。引用4提到了使用counts.get(word,0)+1来更新词频,这点很重要,需要包含在代码示例中。另外,用户提到需要处理标点和大写,所以预处理部分需要包括转换为小写和替换标点为空格。 可能需要注意的问题:用户可能不知道如何处理文件读取时的编码问题,所以示例代码中最好指定编码方式,比如'utf-8'。此外,分割单词时,如果文本中有连字符或者缩略词,简单的split()可能不够,但根据引用中的方法,用空格替换标点后split应该是可行的。 示例代码的结构要清晰,每个步骤加上注释。比如,读取文件、预处理文本、统计词频排序和输出结果。同时,要避免使用高级库,按照引用3中的要求,只能使用字典,不能使用collections.Counter。 最后,生成的相关问题需要与词频统计相关,比如预处理的注意事项、排除停用词的方法、结果展示方式等。确保问题覆盖用户可能遇到的后续疑问。</think>### Python实现《哈姆雷特》词频统计步骤 #### 1. 文本获取与读取 从Gutenberg项目下载《哈姆雷特》英文文本[^3],保存为`hamlet.txt`。使用Python内置函数读取文件内容: ```python with open('hamlet.txt', 'r', encoding='utf-8') as f: text = f.read() ``` #### 2. 文本预处理 - **符号过滤**:将所有非字母字符替换为空格 - **归一化处理**:统一转为小写字母 ```python text = text.lower() for char in '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~': text = text.replace(char, ' ') ``` #### 3. 单词分割与统计 使用字典数据结构进行词频统计: ```python words = text.split() counts = {} for word in words: counts[word] = counts.get(word, 0) + 1 # 字典的get方法实现自动初始化[^4] ``` #### 4. 结果排序与输出 将字典转换为列表并按词频降序排序: ```python items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) for i in range(10): # 输出前10个高频词 word, count = items[i] print(f"{word:<15}{count}") ``` ### 完整示例代码 ```python def hamlet_word_count(): # 读取文件 with open('hamlet.txt', 'r', encoding='utf-8') as f: text = f.read() # 预处理 text = text.lower() symbols = '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~' for char in symbols: text = text.replace(char, ' ') # 统计词频 words = text.split() counts = {} for word in words: counts[word] = counts.get(word, 0) + 1 # 排序输出 items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) for i in range(10): word, count = items[i] print(f"{word:<15}{count}") hamlet_word_count() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值