當前位置:
首頁 > 知識 > 如何用 Python 一鍵搞定 CET 4 最愛考的 5000 個單詞?

如何用 Python 一鍵搞定 CET 4 最愛考的 5000 個單詞?


如何用 Python 一鍵搞定 CET 4 最愛考的 5000 個單詞?

打開今日頭條,查看更多精彩圖片



作者 | 小詹責編 |胡巍巍

不會英語的程序員不是好程序員 ?筆者不敢亂立Flag ,但是我知道的是程序員就喜歡自己動手幹些實事 ,比如今天教大家自己動手做個有意思的項目——從歷年四級英語真題中獲取詞頻最高的5000個辭彙 ,並進行翻譯!綜合用到了爬蟲 、數據分析等知識 ,親愛的讀者們不來試試嗎 ?

1.程序介紹


這是一個單詞頻率統計程序 ,基於Python3 ,我將往年真題按照詞頻排序得到了四級詞庫 :總結出了5000個出現頻率極高的單詞。

  • 自動批量收集文件中的英語單詞txt (utf-8);
  • 統計排序保存到本地資料庫voca.db;
  • 翻譯英文得到中文解釋;
  • 資料庫文件提取得到CSV表格;

在結合到大量的往年CET-4真題庫的情況下

  • 本軟體成為了考試必備詞庫;
  • 希望大家都能輕鬆過四級。




2.工作流程


  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。




3.具體實現


數據(Docx複雜的文檔結構不好用,可以在Word裡面以TXT方式保存)。


如何用 Python 一鍵搞定 CET 4 最愛考的 5000 個單詞?


讀入文件拿到所有單詞:

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)




4.收穫成果啦


翻譯過程:


如何用 Python 一鍵搞定 CET 4 最愛考的 5000 個單詞?


出現次數最多的簡單詞:


如何用 Python 一鍵搞定 CET 4 最愛考的 5000 個單詞?


出現次數較少,值得一背的詞:


如何用 Python 一鍵搞定 CET 4 最愛考的 5000 個單詞?



作者簡介:小詹,一名雙一流高校在讀研究生 ,目前維護個人訂閱號[小詹學Python]。主要涉及圖像處理、網路爬蟲、leetcode刷題和一些有趣的Python騷操作。

本文系作者投稿,版權歸作者所有。



徵稿啦

CSDN 公眾號秉持著「與千萬技術人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時間以技術人的獨特視角描述技術人關心的行業焦點事件,更有「技術頭條」專欄,深度解讀行業內的熱門技術與場景應用,讓所有的開發者緊跟技術潮流,保持警醒的技術嗅覺,對行業趨勢、技術有更為全面的認知。

如果你有優質的文章,或是行業熱點事件、技術趨勢的真知灼見,或是深度的應用實踐、場景方案等的新見解,歡迎聯繫 CSDN 投稿,聯繫方式:微信(guorui_1118,請備註投稿+姓名+公司職位),郵箱(guorui@csdn.net)。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

如何在 GitHub 上大顯身手?
程序員爬蟲竟構成犯罪?

TAG:CSDN |