#40python 统计四级单词词频

#40python 统计四级单词词频

2019年05月21日 23时36分54秒

  1. 成果展示
  2. 第一步寻找四级真题
  3. 第二步分析文字
  4. 文字拆分并排序
  5. 文字写入文件
  6. 总代码

碎碎念

代码主要靠百度边查边写
为了能够更好地展现 代码的生成过程,(主要是懒)
作业的完成主要靠百度,基本上是用啥查啥
(有同学问我题,说为啥..我说百度上有,便说我敷衍,百度上真的有,说的很清楚,比我讲的更高效,更系统,遇到这种情况我也是没办法了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()函数 进行排序

资料 python 统计单词个数

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)

文字写入文件

参考资料 python的list变量保存为txt文本

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

猜你喜欢

转载自www.cnblogs.com/hx97/p/10903310.html