码迷,mamicode.com
首页 > 编程语言 > 详细

会python这些技术,英语四级轻松过!!!

时间:2018-11-28 13:13:06      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:settings   raw   ase   stand   软件   eww   +=   保存   主程   

不会英语的程序员不是好程序员 ?但是我知道的是程序员就喜欢自己动手干些实事 ,比如今天教大家自己动手做个有意思的项目——从历年四级英语真题中获取词频最高的 5000 个词汇 ,并进行翻译 !综合用到了爬虫 、数据分析等知识 ,亲爱的读者们不来试试吗 ?欢迎加入python学习交流q群250933691,分享我精心准备的Python学习资料,0基础到进阶!希望你们在学习Python道路上少走弯路!加油!

技术分享图片

程序介绍

这是一个单词频率统计程序 ,基于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模块

frompeeweeimport*

db = SqliteDatabase(‘voca.db‘)

classNewWord(Model):

单词名

name = CharField()

解释

explanation = TextField(default=‘‘)

词频

frequency = IntegerField(default=0)

音标

phonogram = CharField(default=‘‘)

classMeta:

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‘][0]

assertinfo[‘baesInfo‘][‘symbols‘][0]

去除没有音标的单词

assertdata[‘ph_am‘]anddata[‘ph_en‘]

去除没有词性的单词

assertdata[‘parts‘][0][‘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

importcsv

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

defextract()

pass

forwordinNewWord.select():

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

datas.append(i)

yielddatas

#保存函数

defsave(data):

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

收获成果啦

翻译过程

技术分享图片
出现次数最多的简单词
技术分享图片

出现次数较少,值得一背的词
技术分享图片
欢迎加入python学习交流q群250933691,分享我精心准备的Python学习资料,0基础到进阶!希望你们在学习Python道路上少走弯路!加油!

会python这些技术,英语四级轻松过!!!

标签:settings   raw   ase   stand   软件   eww   +=   保存   主程   

原文地址:http://blog.51cto.com/14042734/2323015

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!