Hamlet, are u ok?

本文通过Python演示如何统计《Hamlet》中主角Hamlet的出场频次,排除标点符号和大小写干扰,利用字典和列表进行数据处理和排序,最终展示排名前十的结果。

        实务中,我们经常需要统计某个词汇或事物出现的频度,如何才能实现呢?

        事物与频度一一相对(映射),又要一分高下(排序),是字典和列表的拿手好戏。考虑到语言语法等差别,我们分别以常见的英文和中文为例。需要注意的是,目标文本应符合 UTF-8 编码标准,否则会报错。

        《Hamlet》是莎翁所有戏剧中篇幅最长的一部,也是其最负盛名的剧本。全文 3200 余词,让我们看看主角 Hamlet 的出场频次,并向莎翁致敬!

        考虑到英文的书写规则,首先需除外标点符号、特殊符号和大小写的干扰。

txt=txt.lower()
for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':    #"\"单独使用为转义符
    txt=txt.replace(ch,' ')
return txt

        其次将得到的字符串切片,遍历计数,创建字典及键值对列表,然后根据值排序。

words=txt.split()
counts={}
for word in words:
    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,count=items[i]
    print('{0:<10}{1:>5}'.format(word,count))    #不显示次数则直接print(word)

        结果如下:

        可见,王子骑着白马,闪亮登场的次数屈居第九,是不是很惊喜☺

         完整代码:

#词频统计

def getTxt():
    txt=open('hamlet.txt','r',encoding='utf-8').read()    #注意文件路径
    txt=txt.lower()
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt=txt.replace(ch,' ')
    return txt

Txt=getTxt()
words=Txt.split()
counts={}
for word in words:
    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,count=items[i]
    print('{0:<10}{1:>5}'.format(word,count))


 参数 key=lambda x:x[1] 的含义,请参见:

Python 函数 sort(),sorted() 之区别及 key=lambda x:x[] 之理解

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香饽々

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值