词频统计
编写程序统计一个英文文本文件中单词的出现次数,并将出现次数最多(次数排名前10)的单词和它们的出现次数按降序显示。
1. 使用一个字典来存储包含了单词和它的次数的条目;
2. 统计单词是不考虑大小写的,例如:认为Good与good是一个单词;
第一步:读取文件
通过txt.lower()函数将字母变成小写
英文单词的分割可以是空格、标点符号或者特殊符号。为了统一分割方式,将各种特殊字符和标点符号使用txt.repalce()方法替换成空格,再提取单词
ef getText(): # 读取txt文件 txt=open("one.txt","r").read() # 将单词全部转换为小写 txt=txt.lower() # 将特殊字符替换成为空格 for ch in '!@#$%:^&*()-.;': txt=txt.replace(ch," ") return txt test=getText()
第二步:对单词进行计数
# 对字符串通过空格进行分割 words=test.split() # 定义空字典,用来存放单词和对应的出现次数 counts={} for word in words: # 对word出现的频率进行统计,当word不在words时,返回值是0,当word在words中时,返回+1 # counts[word]=counts.get(word,0)+1 # 第二种写法 if word in counts: counts[word] = counts[word]+1 else: counts[word]=1
counts[word]=counts.get(word,0)+1
如果word在counts中,则返回word对应的值;如果word不在counts中,则返回0
第三步:对单词的统计值进行排序
由于字典类型没有顺序,需要将其转换为有顺序的列表类型,再用sort()方法和lambda函数配合实现根据单词次数对元素进行排序。
# 将字典转换为记录列表 # items()方法:以列表形式返回可遍历的(键, 值) 元组数组。 items=list(counts.items()) # 以第二列排序 items.sort(key=lambda x:x[1],reverse=True) # 输出频率前10的单词和次数 for i in range (10): word,count=items[i] print("{0}:{1}".format(word,count))
下面来个中文文档统计词频
import jieba txt=open('xyj.txt','r',encoding ="utf-8").read() # jieb.lcut 以及 jieba.lcut_for_search 直接返回list words=jieba.lcut(txt) #新建一个空字典 counts={} for word in words: #挑出单个分词(不计数) if len(word) == 1: continue else: 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,counts=items[i] print('{0}:{1}'.format(word,counts))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现