Hamlet, are u ok?

导读:本篇文章讲解 Hamlet, are u ok?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

        事物与频度一一相对(映射),又要一分高下(排序),是字典和列表的拿手好戏。考虑到语言语法等差别,我们分别以常见的英文和中文为例。需要注意的是,目标文本应符合 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)

        结果如下:

Hamlet, are u ok?

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

         完整代码:

#词频统计

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[] 之理解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/106966.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!