标签: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道路上少走弯路!加油!
标签:settings raw ase stand 软件 eww += 保存 主程
原文地址:http://blog.51cto.com/14042734/2323015