前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >?我拿 12 年 36 套四级真题做了什么 ?

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

作者头像
小小詹同学
发布2018-09-25 17:58:11
6700
发布2018-09-25 17:58:11
举报
文章被收录于专栏:小詹同学小詹同学

这是第 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 因吹斯听~

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-29,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 小詹学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 程序介绍
  • 工作流程
  • 具体实现
  • 收获成果啦
    • 翻译过程
      • 出现次数最多的简单词
        • 出现次数较少,值得一背的词
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com