如何用Python字典统计文本单词频率?当前代码仅统计字母
解决单词频率统计的问题
嘿,你遇到的问题其实很典型——你的代码现在是在遍历字符串的单个字符,而不是你想要的单词!这就是为什么字典里只统计了字母的出现次数。
问题出在哪?
你写的for item in text_string会把字符串拆分成一个个独立的字符(比如"hello world"会被拆成'h','e','l','l','o',' ','w','o','r','l','d'),循环里的item每次都是单个字母,自然统计的是字母频率,不是单词。
怎么改?
要统计单词,第一步得把处理好的文本分割成单词列表,然后遍历这个列表就行。这里给你两种方案:
方案1:手动实现字典统计
先把字符串用split()方法拆成单词(split()默认按空格分割,正好适配你已经处理好的文本),然后遍历单词列表:
# 假设text_string已经是处理好的、仅含字母和空格的字符串 word_counts = {} # 分割字符串为单词列表 words = text_string.split() for word in words: # 统一转小写,避免大小写差异(比如"Hello"和"hello"算同一个单词) normalized_word = word.lower() if normalized_word in word_counts: word_counts[normalized_word] += 1 else: word_counts[normalized_word] = 1 print(word_counts)
方案2:用Python标准库简化代码
Python的collections模块里有个Counter类,专门用来统计可迭代对象的元素频率,用它能省掉很多手动判断的代码:
from collections import Counter # 分割字符串+统一小写,直接传入Counter统计 words = text_string.split() word_counts = Counter(word.lower() for word in words) print(word_counts)
这个方法不仅简洁,还自带很多实用功能(比如most_common(n)可以快速找出出现次数最多的n个单词)。
小提示
如果你的文本处理步骤还可能残留一些特殊字符(虽然你说已经移除了),可以用正则表达式先提取所有单词,比如:
import re # 提取所有由字母组成的单词 words = re.findall(r'[a-zA-Z]+', text_string)
不过如果你的预处理已经做得很干净,这一步就不需要啦。
内容的提问来源于stack exchange,提问作者Viktor Mohlin
相关产品推荐
相关产品推荐

