​我拿 12 年 36 套四级真题做了什么 ?

这是第 3 篇读者投稿文章 ,欢迎亲爱的读者们踊跃投稿哦 。

不会英语的程序员不是好程序员 ?小詹不敢乱立 flag ,但是我知道的是程序员就喜欢自己动手干些实事 ,比如今天教大家自己动手做个有意思的项目——从历年四级英语真题中获取词频最高的 5000 个词汇 ,并进行翻译 !综合用到了爬虫 、数据分析等知识 ,亲爱的读者们不来试试吗 ?

程序介绍

这是一个单词频率统计程序 ,基于python3 ,我将往年真题按照词频排序得到了四级词库 :总结出了 5000 个出现频率极高的单词 。

  • 自动批量收集文件中的英语单词 txt (utf-8)
  • 统计排序保存到本地数据库 voca.db
  • 翻译英文得到中文解释
  • 数据库文件提取得到csv表格

在结合到大量的往年 cet-4 真题库的情况下

  • 本软件成为了考试必备词库
  • 希望大家都能轻松过四级

工作流程

  1. settings.py 配置查询文档
  2. work.py 自动分析数据保存至voca.db数据库文件
  3. translate.py 自动打开数据库调用api翻译单词并保存到数据库里
  4. db2csv.py 将数据库文件转换成csv表格文件
  • python work.py
  • python translate.py
  • python db2csv.py

具体实现

  • 数据 (docx 复杂的文档结构不好用,可以在word里面以txt方式保存)
  • 读入文件拿到所有单词 def _open_file(self,filename):#打开文件,返回所有单词list with open(filename,'r',encoding='utf-8')as f: raw_words = f.read() low_words = raw_words.lower() words = re.findall('[a-z]+',low_words) #正则re找到所有单词 return words
  • 剔除 常用单词(is am are do……) def _filter_words(self,raw_words,count=NUMBERS):#载入未处理的所有单词列表 和 默认count值 new_words = [] for word in raw_words:#找出非exclude 和 长度大于1 的单词 -> new_words if word not in exclude_list and len(word) > 1: new_words.append(word) pass
  • 计数 from collections import Counter #计数器 pass c = Counter(words) #list new_words return c.most_common(5000) #拿到出现次数最多的5000单词,返回从大到小的排序list[(and,1),....]
  • 数据库初始化 peewee模块 from peewee import * db = SqliteDatabase('voca.db') class NewWord(Model): # 单词名 name = CharField() # 解释 explanation = TextField(default='') # 词频 frequency = IntegerField(default=0) # 音标 phonogram = CharField(default='') class Meta: database = db
  • 加入单词到数据库 def insert_data(self,words_times): # 向数据库内插入数据 for word,fre in words_times: word_ins = NewWord.create(name = word , frequency = fre) #直接调用create book.is_analyzed = True book.save()
  • 翻译 #iciba翻译函数 def trans(self, word): url = 'http://www.iciba.com/index.php?a=getWordMean&c=search&word=' + word try: req = requests.get(url) req.raise_for_status() info = req.json() data = info['baesInfo']['symbols'][0] assert info['baesInfo']['symbols'][0] # 去除没有音标的单词 assert data['ph_am'] and data['ph_en'] # 去除没有词性的单词 assert data['parts'][0]['part'] except: return ('none','none') ph_en = '英 [' + data['ph_en'] + ']' ph_am = '美 [' + data['ph_am'] + ']' ex = '' for part in data['parts']: ex += part['part'] + ';'.join(part['means']) + ';' return ph_en+ph_am, ex #调用翻译函数,保存中文到数据库 for i in NewWord.select(): i.explanation = str(t.trans(i.name)[1]) i.save()
  • 提取所有单词到csv import csv #提取所有数据库内容生成迭代对象 yield ~ 好好看看如何使用 def extract() pass for word in NewWord.select(): for i in [word.name, word.explanation, word.frequency]: datas.append(i) yield datas #保存函数 def save(data): with open('words.csv', 'a+', errors='ignore', newline='')as f: csv_writer = csv.writer(f) csv_writer.writerow(data) #主程序 datas = extract() #yeild 迭代对象 while True: try: data = next(datas) except: break save(data)

收获成果啦

翻译过程

出现次数最多的简单词

出现次数较少,值得一背的词

上述完整代码和获取到的统计结果(5000个高频词)分享到公号【小詹学python】,公号后台回复关键词 “四级” 即可获取 。最后 ,小詹只想说 so 因吹斯听~

原文发布于微信公众号 - 小詹学Python(xiaoxiaozhantongxue)

原文发表时间:2018-08-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发 & 算法杂谈

基于Lockset和Happens-before的数据竞争方法汇总

之前的文章介绍都是单独使用lockset或是单独使用happens-before关系进行动态数据竞争检测的方法。单纯使用lockset算法,由于不考虑其他的一些...

21670
来自专栏追不上乌龟的兔子

JupyterLab——更具生产力的Jupyter环境

Jupyter源于Ipython Notebook,是使用Python(也有R、Julia、Node等其他语言的内核)进行代码演示、数据分析、可视化、教学的很好...

15.2K40
来自专栏阿凯的Excel

或关系模糊匹配求均值(pandas插播版7)

上期用Excel的复杂函数解决了或关系模糊匹配求均值。本期和大家分享一下如何使用Python的Pandas解决该问题。 郑重说明:本期只是分享解决方案,且pan...

52680
来自专栏嵌入式程序猿

【电机控制不得不学习的干货:】 飞思卡尔MCU正交编/解码器模块

在电机控制领域,我们经常需要得到电机的转速,位置来执行算法,那么想知道转速是如何获得的吗?看过来,猿来你在这里O(∩_∩)O~ 正交编码器简介 飞思卡尔增强型正...

311110
来自专栏鸿的学习笔记

简单聊聊py的高性能编程

高性能编程的含义是通过编写更为高效的代码或者改变操作方式,也就是找到更合适的算法去降低时间上的开销。 计算机的模型可以分为三种,分别是计算单元(CPU...

9510
来自专栏小红豆的数据分析

小蛇学python(12)分析《今生今世》人物关系图谱

《今生今世》是渣男胡兰成所写的一部自传体小说。今天我们就来分析一下在他所写的自传中的人物关系图谱,分析一下胡兰成到底和多少女人有关系。

56730
来自专栏Java架构

分布式超大规模数据的实时快速排序算法

39580
来自专栏灯塔大数据

每周学点大数据 | No.48 计算子图同构

No.48期 计算子图同构 Mr. 王:我们再来看一个例子——计算子图同构。这个问题给定(节点有标签)数据图G和查询图P,找到G 中和P 同构的子图。这是一个...

32780
来自专栏数据结构与算法

洛谷P2147 [SDOI2008]Cave 洞穴勘测

题目描述 辉辉热衷于洞穴勘测。 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区。经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道...

36290
来自专栏吉浦迅科技

DAY39:阅读扩展数据类型

15520

扫码关注云+社区

领取腾讯云代金券