#40python 统计四级单词词频
2019年05月21日 23时36分54秒
碎碎念
代码主要靠百度边查边写
为了能够更好地展现 代码的生成过程,(主要是懒)
作业的完成主要靠百度,基本上是用啥查啥
(有同学问我题,说为啥..我说百度上有,便说我敷衍,百度上真的有,说的很清楚,比我讲的更高效,更系统,遇到这种情况我也是没办法了o(╥﹏╥)o)
我也很想给解释清楚,但是无奈我也是菜的抠脚,只能干着急,写写博客来锻炼一下自己。。
学习路径有很多嘛
所以我赶紧写个博客,再问我题,我可以直接甩博客链接过去.简单高效
我也没有进行过多的修饰和完善代码。
这样可能更有助于像我这样的新手,看到代码实现的过程,
通过哪些博客的借鉴最终成型的。
很多时候博客也是没人会看的,但是写给自己看很重要,不写的时候感觉学会了,一操作发现啥也不会,
好不容易,做上来了,写个博客,发现啥也说不清楚
所以写博客很重要滴!!!
我在知乎上看到过一个问题就是,为啥有人一直坚持写博客?
第一个回答是
即使最后没有人为你鼓掌,也要优雅地谢幕,感谢自己的认真付出。
不瞎写了,看今天的笔记
成果展示
第一步寻找四级真题
网上随便找的
网上版本多样,不能统一,所以我直接暴力,复制文本,粘贴到文本格式TXT保存方便读取
第二步分析文字
文字中很明显可以看出,有中文,有标点,怎么去掉呢?
想办法去除这些干扰因素
查阅资料 使用python提取中文数字和英文
我构建了下列函数,读取文件并返回去除干扰字符后的字符串
def F(a):
f=open(a,'r')
st=f.read()
s1 = re.sub(u"([^\u0041-\u005a\u0061-\u007a])"," ",st)
return s1
f.close()
紧接着 发现每段文字,第一个单词会是大写的,所以也要考虑大小写的问题,加上一句代码进行大小写转换
s=s.lower()
文字拆分并排序
1.所有干扰字符替换成空格,并且本身单词与单词之间以空格进行分隔,所以直接使用空格拆分即可
引用string 库里的split()函数
2.拆分后为一个列表,遍历列表统计单词出现个数
3.使用字典类型进行统计,key存储单词,velue存储单词个数
4.存储完后用sort()函数 进行排序
s=s.lower()
r=s.split()
words=r
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)
文字写入文件
f=open('最终.txt','w')
sw='四级单词词频统计\n'
for i in range(len(items)):
f.write(items[i][0]+'\t'+str(items[i][1])+'\n')
f.close()
总代码
import string
import re
def F(a):
f=open(a,'r')
st=f.read()
s1 = re.sub(u"([^\u0041-\u005a\u0061-\u007a])"," ",st)
return s1
f.close()
f=open('17-12.txt','r')
st=f.read()
s = re.sub(u"([^\u0041-\u005a\u0061-\u007a])"," ",st)
f.close()
f=open('17-12-1.txt','r')
st=f.read()
s1 = re.sub(u"([^\u0041-\u005a\u0061-\u007a])"," ",st)
s=s+s1
f.close()
f=open('17-12-2.txt','r')
st=f.read()
s1 = re.sub(u"([^\u0041-\u005a\u0061-\u007a])"," ",st)
s=s+s1
f.close()
s+=F('16-12-1.txt')
s+=F('16-6-2.txt')
s+=F('15-12-1.txt')
s=s.lower()
r=s.split()
words=r
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)
f=open('最终.txt','w')
sw='四级单词词频统计\n'
for i in range(len(items)):
f.write(items[i][0]+'\t'+str(items[i][1])+'\n')
f.close()