本文主要介绍如何使用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()
结果如下:

统计字母数量python 统计英文字母个数python_柱状图

图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)

结果如下(一部分):

统计字母数量python 统计英文字母个数python_统计字母数量python_02

图2 高频词汇

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