python中怎么统计英文字符的个数_使用python统计英文文档中的字母占比和词频

本文主要介绍如何使用python软件进行统计文档中各字母出现概率和数量最多单词。程序中用到的部分库文件需自行下载,可参考网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

python在数据处理、机器学习等方面功能强大外,相较其它软件具有简单易学可操作性好等优点,可称得上一部通用全民软件,读者可参照此程序可完成类似工作。

首先拿到一篇文档,我们观察文档中不仅含有我们要处理的字母,还有一些标点符号、数字或者其它语言文字,这对统计是有害的,因此需要对文档进行处理一下。目的是只保留字母。调用正则是个不错的选择。

import re

filename = input('please input a file name:') #打开文本

f = open(filename,encoding='utf-8')

text = f.read()

rule = re.compile(r'[^a-zA-Z]') #只保留字母

text = rule.sub('',text)

这是产生的新文本就是只含有字母,接下来就可以统计文本中的字母占比了。先进行生成大小写字母列表WD[ ]和wd[ ],然后按字母顺序对整篇文档扫描,计算出各字母数量和百分比。

for letter1 in range(65,91): #大写字母列表

WD.append(chr(letter1))

for letter2 in range(97,123): #小写字母列表

wd.append(chr(letter2))

for i in range(26):

sum0 = text.count(wd[i])+text.count(WD[i])

per0 = (text.count(wd[i])+text.count(WD[i]))/len(text)

per = '{:.2%}'.format(per0)

# print('文中',wd[i],'和',WD[j],'共有:',sum0)

# print('文中',wd[i],'和',WD[j],'占比:',per)

x.append(wd[i]) #以小写字母形式输出

y.append(sum0) #各字母数量

p.append(per) #各字母占比

最后以一种形式进行输出,本文选用matplotlib中柱状图,柱状图能一目了然观察数据规律,如需要,可使用plt.savefig()将结果保存到电脑中,以下是完整程序:

import re

import matplotlib

from matplotlib import pyplot as plt

from string import digits

fig,ax=plt.subplots()

plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签

wd = [] #小写字母列表

WD = [] #大写字母列表

x = [] #画柱状图以以小写字母显示

y = [] #大小写字母数据统计

p = [] #各字母占比

filename = input('please input a file name:') #打开文本

f = open(filename,encoding='utf-8')

text = f.read()

rule = re.compile(r'[^a-zA-Z]') #只保留字母

text = rule.sub('',text)

for letter1 in range(65,91): #大写字母统计

WD.append(chr(letter1))

for letter2 in range(97,123): #小写字母统计

wd.append(chr(letter2))

for i in range(26):

per = (text.count(wd[i])+text.count(WD[i]))/len(text)

per = '{:.2%}'.format(per)

sum0 = text.count(wd[i])+text.count(WD[i])

x.append(wd[i])

y.append(sum0)

p.append(per)

ax.text(x[i], y[i]+200, p[i], ha='center', va='bottom',fontsize=5) #柱状图Y值标注

ax.bar(x,y,label="占比",color="blue") #画柱状图

ax.legend(loc="best",frameon=False)

ax.set_xlabel('字母')

ax.set_ylabel('数量')

ax.set_title("文摘中各字母占比")

plt.rcParams['savefig.dpi'] = 400 # 图片像素

plt.rcParams['figure.dpi'] = 400 # 分辨率

plt.rcParams['figure.figsize'] = (12.0, 8.0) # 尺寸

plt.savefig('C:\D disk\文摘各字母占比',bbox_inches = 'tight')

plt.show()

结果如下:

37d12f2eb9389b500f214ab9d762b6dbe5116ed8.jpeg?token=5d1ace876d5c7c7db8aef37c642a8aa4&s=78A73172C0F7FBB93EF6C7C3020010AC图1 字母占比

还是使用上篇文档,这次我们要统计一下其中出现最多的单词,预处理文档方法与上面类似,所不同的是,这次还需要保留空格,同时需要将字母大小写统一,生成的新文档只有一个一个排列的单词,然后以单词为键,统计单词个数。 或许英语四六级高频词汇就是这样查找的吧。

import re

da = {}

filename = input('please input a file name:') #打开文本

f = open(filename,'r',encoding='utf-8')

text = f.read()

text = text.lower() #大写字母转换小写

rule = re.compile(r'[^a-zA-Z\s]') #只保留字母空格

text = rule.sub('',text)

wd = text.split() #以空格拆分为列表

#print(len(words))

for w in wd:

da[w] = da.get(w,0) + 1 #单词计数

items = list(da.items())

items.sort(key=lambda x:x[1],reverse=True) #排序

for i in range(len(items)):

x,y = items[i]

print(x,y)

结果如下(一部分):

78310a55b319ebc4d21eb0b5d3719cfa1e171611.jpeg?token=11dda1cecbbeb8bd63ddc07ef974295e&s=04FB883A85D05DC212555BDF030010B4图2 高频词汇

最后总结一下,在进行数据分析处理时,首先观察数据,若数据不能直接使用,要根据要求对数据预处理,然后通过适当的方法进行处理,最后选择适合的图表把结果呈现出来,方便观察数据规律,发掘其中内涵。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值