Python——实现英文词频统计:以hamlet为例

中国大学MOOC 嵩天老师在课堂上讲解的,附上代码和详细注释。

代码和文本文件需要放到同一目录下。


def getText():
    txt = open("hamlet.txt","r").read()
    txt = txt.lower()  # 将所有字符转换为小写
    for ch in '!@#$%^&*()":;?,.><+=-_{}[\\]\/|`~':  #将所有特殊符号用空格替代
        txt = txt.replace(ch," ")
    return txt

hamletTxt = getText()
words = hamletTxt.split()  #用空格分隔文本并返回列表格式
counts = {}
for word in words:
    # counts.setdefault(word, 0)
    # counts[word] += 1
    # 如果 word变量对应的Key已经在字典中了,那么counts.setdefault(word, 0) 这一行的作用相当于counts.get(word)。
    #    # 如果word变量对应的Key不在字典中了,那么此时就会添加这个Key,然后把它的值设置为0。
    # 原文链接:https: // blog.csdn.net / weixin_39862985 / article / details / 111499002
    counts[word] = counts.get(word,0) + 1
items = list(counts.items())  #返回所有键值对信息,生成列表
#key=lambda 元素: 元素[成员索引] .例如:key=lambda x: x[1] 对元素第二个成员进行排序.
# 排序默认从小到大升序,reverse= True表示对列表反排序:降序排列
items.sort(key=lambda x : x[1],reverse= True)
for i in range(10):
    word,count = items[i]
    print("{0:<10}{1:>5}".format(word,count))
    #题中0对应的是Word,1对应的是count。
    # 冒号是引导符,后面跟的是格式控制方法。<表示左对齐,>表示右对齐,数字表示宽度。
    # 文中<10表示左对齐,并占10个位置,>5表示右对齐,占5个位置。

 

你可能感兴趣的:(python,基础语法,python)