python入门小程序: 英文词频统计

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/chenhyc/article/details/102557400
#文本词频统计
def getText():
	txt = open("E:\python学习\python_work\hamlet.txt","r").read()
	txt = txt.lower()
	for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':  #通过for循环,依次取出!等特殊字符赋值给ch
		txt = txt.replace(ch," ")                  #取出特殊字符后,将txt中!全部替换成空格后,再通过for循环依次将剩余的特殊字符全部替换
	return txt

hamletTxt = getText()
words = hamletTxt.split()   #以“空格”为分隔符
counts = {}    #初始一个”空字典“,因为单词和次数要形成映射,所以需要把words列表,改成“字典“,方便映射统计
for word in words:
	counts[word] = counts.get(word,0)+1

#word字典类型,counts.get(word,0),表示如果word存在返回键值,如果word不存在,返回0
'''刚开始字典counts是空的,所以words列表里面的任何字符,都不在counts字典里,因此第一次索引到的字符,都是不存在,为0+1,
例如a首次遇到,则为a:1,当首次添加字符到字典后,第二次再遇到相同字符时,值1+1=2,为a:2,并将2赋值给counts[a]'''

items = list (counts.items())  #counts.item(),转换成[(a,2),(b,1),.....],的元组类型,list将元组类型转换成列表类型
items.sort(key=lambda x:x[1],reverse=True)  #lambda定义x,及需要排列的元素,x[1],代表对元组第二个元素进行排列
for i in range(10):
	word, count = items[i]
	print("{0:<10}{1:>5}".format(word, count))
#0和1表示位置,0对应word,1对应count
#<表示左对齐,>表示右对齐,数字表示宽度。同理,题中<10表示左对齐,并占10个位置,>5表示右对齐,占5个位置。

猜你喜欢

转载自blog.csdn.net/chenhyc/article/details/102557400