分享

答粉丝问|统计文本中字母的出现次数及频率

 算法与编程之美 2020-08-08

1 前言

近日,小编收到一粉丝的留言,想要知道如何用python统计文本中英文字母的出现次数及频率。所以特写此篇文章来为这个粉丝解答疑惑。

图1 粉丝留言

2 问题解决

这个问题可以分为两个部分,一是用python实现对文本文件的操作,二是python对字符串的计数操作。为了方便大家理解,小编将先说第二部分再说第一部分。

2.1用python统计给定字符串中的英文字母出现的次数及频率。

统计字符串中的英文字母出现次数的方法有很多种,小编就给大家介绍比较简单的一种,容易理解些。

“统计”。要统计一个字符的出现次数,在python中可以直接用count()函数,比如要统计的字符为i,字符串为text_file,其用法见代码。

count = text_file.count(i) #统计该字母在原文本中的出现次数

通过这行代码,已经可以实现统计想要的字符在字符串中的出现次数了,然后它出现的频率就直接可以用出现次数除以总字符数。接下来就要统计多个英文字母了。

“过滤”。要统计多个字母,就需要不停的执行第一步,所以就需要使用for循环,i就在目标字符串中遍历。因为只需要统计英文字母,所以也可以用python自带的判断函数isalpha()。还有为了在遍历的时候不重复统计出现过的字符,所以就需要对目标字符串做一个处理,用pythonset()函数就可以将字符串转为集合(自动过滤重复字符)。详见代码。

text_file_set = sorted(set(text_file)) #将文本排序并返回去掉重复字符的集合

for i in text_file_set: #遍历得到的文本集合

    if i.isalpha(): #判断是否是英文字母

        count = text_file.count(i) #统计该字母在原文本中的出现次数

        frequency = count/text_count #计算该字母出现频率

        print("%s:%d;%.4f" % (i,count,frequency)) #输出要得到的(频率保留四位小数)

2.2python实现对文本文件的操作。

通过以上步骤,已经实现了对给定字符串的字母统计了,给定方式就是自己输入,当然自己输入很麻烦,就算粘贴复制也嫌麻烦,所以就需要用到python的内置函数open()来帮助打开目标文本文件。这里小编先给大家简单介绍以下open()函数的用法。

open(‘file.name,mode,......)

引号后面还有很多参数,这里就不详细讲了,只需要记住常用的mode类型及功能。

w:以写方式打开

a:以追加方式打开

r:以只读模式打开

r+:以读写模式打开

w+:以读写模式打开

rb:以二进制读模式打开

wb:以二进制写模式打开

ab:以二进制追加模式打开

rb+:以二进制读写模式打开

wb+:以二进制读写模式打开

ab+:以二进制追加模式打开

然后运用这行代码就可以打开目标文本文件。

text = open('test.txt','r') #打开目标文本

注意:这里的test.txt是和代码同路径下的,如果不是,就需要输入完整的路径名称。

打开文件后,还不能直接使用,因为它的类型不是str,所以需要再加一行代码将text转化为可操作的字符串类型(str)。

text_file = text.read() #读取目标文本(转化为字符串类型)

然后可以用type函数看看是不是str类型。

print(type(text),type(text_file))

<class '_io.TextIOWrapper'> <class 'str'>

可以发现文本已经由原来的txt类型转为了str类型。接下来就可以将代码合起来了,然后这个问题就算是解决了。

3 完整代码

text = open('test.txt','r') #打开目标文本

text_file = text.read() #读取目标文本(转化为字符串类型)

text_count = len(text_file) #返回文本中字符总数

text_file_set = sorted(set(text_file)) #将文本排序并返回去掉重复字符的集合

for i in text_file_set: #遍历得到的文本集合

    if i.isalpha(): #判断是否是英文字母

        count = text_file.count(i) #统计该字母在原文本中的出现次数

        frequency = count/text_count #计算该字母出现频率

        print("%s:%d;%.4f" % (i,count,frequency)) #输出要得到的(频率保留四位小数)

看下部分运行效果:

图2 原文本中的内容

图3 部分运行效果

4 总结

这个问题本身并不难,代码也很简单,小编写得这么详细是为了大家好理解,希望大家以后不管遇到什么问题都可以用这种一步一步思考的方式去解决它。

通过上述讲解后,不知道这位粉丝有没有理解呢?如果没有欢迎在下方留言。还有大家如果也有什么问题不能解决或是不太懂,都可以在公众号内留言,公众号的所有小编都将会尽力去给你们解答疑惑。


END

主  编   |   王文星

责  编   |   江来洪

 where2go 团队


微信号:算法与编程之美          

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多