如何用 Python 一键搞定 CET 4 最爱考的 5000 个单词?

快要四六级英语考试,来给大家安逸一下用Python学习英语吧 ,都说不会英语的程序员不是好程序员 ?咱们不敢乱立Flag ,但是我知道的是程序员就喜欢自己动手干些实事 ,比如今天教大家自己动手做个有意思的项目——从历年四级英语真题中获取词频最高的5000个词汇 ,并进行翻译!综合用到了爬虫 、数据分析等知识

程序介绍

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

自动批量收集文件中的英语单词txt (utf-8);

统计排序保存到本地数据库voca.db;

翻译英文得到中文解释;

数据库文件提取得到CSV表格;

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

本软件成为了考试必备词库;

希望大家都能轻松过四级。

工作流程

settings.py配置查询文档;

work.py自动分析数据保存至voca.db数据库文件;

translate.py自动打开数据库调用API翻译单词并保存到数据库里;

db2csv.py将数据库文件转换成csv表格文件;

python work.py;

python translate.py;

python db2csv.py。

具体实现

数据(Docx复杂的文档结构不好用,可以在Word里面以TXT方式保存)。

读入文件拿到所有单词:

def_open_file(self,filename):#打开文件,返回所有单词list

withopen(filename,'r',encoding='utf-8')asf:

raw_words = f.read()

low_words = raw_words.lower()

words = re.findall('[a-z]+',low_words)#正则re找到所有单词

returnwords

剔除常用单词(is am are do……):

def_filter_words(self,raw_words,count=NUMBERS):#载入未处理的所有单词列表 和 默认count值

new_words = []

forwordinraw_words:#找出非exclude 和 长度大于1 的单词 -> new_words

ifwordnotinexclude_listandlen(word) >1:

new_words.append(word)

pass

计数:

fromcollectionsimportCounter#计数器

pass

c = Counter(words)#list new_words

returnc.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

加入单词到数据库:

definsert_data(self,words_times):

# 向数据库内插入数据

forword,freinwords_times:

word_ins = NewWord.create(name = word , frequency = fre)#直接调用create

book.is_analyzed =True

book.save()

翻译:

#iciba翻译函数

deftrans(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'][]

assertinfo['baesInfo']['symbols'][]

# 去除没有音标的单词

assertdata['ph_am']anddata['ph_en']

# 去除没有词性的单词

assertdata['parts'][]['part']

except:

return('none','none')

ph_en ='英 ['+ data['ph_en'] +']'

ph_am ='美 ['+ data['ph_am'] +']'

ex =''

forpartindata['parts']:

ex += part['part'] +';'.join(part['means']) +';'

returnph_en+ph_am, ex

#调用翻译函数,保存中文到数据库

foriinNewWord.select():

i.explanation = str(t.trans(i.name)[1])

i.save()

提取所有单词到CSV:

import csv

#提取所有数据库内容生成迭代对象 yield ~ 好好看看如何使用

defextract()

pass

forwordinNewWord.select():

foriin[word.name, word.explanation, word.frequency]:

datas.append(i)

yielddatas

#保存函数

defsave(data):

with open('words.csv','a+', errors='ignore', newline='')asf:

csv_writer = csv.writer(f)

csv_writer.writerow(data)

#主程序

datas = extract()#yeild 迭代对象

whileTrue:

try:

data =next(datas)

except:

break

save(data)

收获成果啦

翻译过程:

出现次数最多的简单词:

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181115A1GCGL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券