统计中英文文章中汉字个数字频或单词个数词频( 二 )

<]\[]./',""") ):""" 使用三引号可以便于引号的输入,最前面加一个字母r,代表转义,特殊字符无需在内部输入\进行转义"""ret = [' ' if c in chars else c for c in line]# 列表解析式return"".join(ret).split() # 返回分割后的列表字符串with open("work/harry2.txt","r",encoding= 'utf-8')as f :for line in f :for word in makekey(line):s=s+1d[word]=d.get(word,0)+1print('总词数:',s)lstWords2=sorted(d.items(),key = lambda x:x[1],reverse= True)print('不同的词数:',len(lstWords2))print ('单词\t词数\t词频')print ('=======================================')for e in lstWords2[:100]:print ('%s\t%d' % e,'\t',e[1]/s)
s1=lstWords2[0][1]s20=0s100=0s600=0s2000=0s3000=0for e in lstWords2[:20]:s20=s20+e[1]for e in lstWords2[:100]:s100=s100+e[1]for e in lstWords2[:600]:s600=s600+e[1]for e in lstWords2[:2000]:s2000=s2000+e[1]for e in lstWords2[:3000]:s3000=s3000+e[1]print ('前1',s1/s)print ('前20',s20/s)print ('前100',s100/s)print ('前600',s600/s)print ('前2000',s2000/s)print ('前3000',s3000/s)
from math import logshannonEnt=0.0for e in lstWords2:prob = float(e[1])/sshannonEnt -= prob * log(prob, 2)print('熵:',shannonEnt)
来看看结果怎么样
完整代码和运行结果已经上传资源了,CSDN突然改版了,不能设置粉丝可下载,我之前上传的都给我变成用积分下载了,实在是不明白,不过我之后上传的资源都会设置成免费免积分下载,不会让CSDN赚大家一分钱的 。
哦对啦,我开始把讲解更新B站和抖音啦,名字都叫猫猫头丁,欢迎大家来关注啊!!!
【统计中英文文章中汉字个数字频或单词个数词频】B站: