1. 程式人生 > >會python這些技術,英語四級輕松過!!!

會python這些技術,英語四級輕松過!!!

文件中 integer json yield elf imp 剔除 圖片 實現

不會英語的程序員不是好程序員 ?但是我知道的是程序員就喜歡自己動手幹些實事 ,比如今天教大家自己動手做個有意思的項目——從歷年四級英語真題中獲取詞頻最高的 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這些技術,英語四級輕松過!!!