我拿 12 年 36 套四級真題做了什麼 ?

這是第 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 因吹斯聽~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章