去年考研,發現了背誦神器Anki後,就一直在用它背各種東西,當然最主要的就是背單詞了。Anki最大的好處就是背誦的卡牌內容可以自己隨便定義,但在背單詞時,每個單詞都需要手動查詢解釋,然後再複製到Anki裏實在是有點麻煩。剛開始每天背的單詞量比較大,查單詞錄入Anki都要花去我大量的時間,為了提高效率,當時我就自己修改了一個Anki插件,實現了只需手動輸入單詞,然後自動批量生成單詞解釋的功能。
效率提高了不少,雖然沒能幫我把英語考到70分。。
錄取之後閑了下來,決定將這個小功能整理一下,做個獨立的插件,方便大家使用,希望能夠幫助用Anki背單詞的小夥伴。插件編號:2074564812,可以下載試用
效果圖如下
功能比較簡單,源代碼已經提交到git上,有興趣的可以看看,或者幫我一起完善
dongshuai2019/anki_englishwordcards?github.com
因為Anki的插件開發文檔不是很詳細,下面簡單講一下模塊的各種功能,以及開發中遇到的坑。
這裡是將在Anki執行打開瀏覽界面時,在瀏覽界面的菜單欄插入一個我們插件的按鈕「單詞寶」。addHook相當於監聽功能,在動作『brower.setupMenus』發生時,調用我們的on_setup_menus插入菜單方法。
import anki
anki.hooks.addHook( browser.setupMenus, on_setup_menus, )
這是具體的on_setup_menus方法。先創建一個menu,然後將menu插入到瀏覽界面的菜單browser.form.menubar.addMenu(menu)。
然後又在menu中定義了兩個子菜單,科林次單和人人詞典,用來分別用不同的詞典來查詢單詞解釋。
from PyQt5 import QtWidgets
def on_setup_menus(browser):
menu = QtWidgets.QMenu("單詞寶", browser.form.menubar) browser.form.menubar.addMenu(menu)
def kelin(): search_word(browser,type=0) def renren(): search_word(browser, type=1)
action = menu.addAction("柯林辭典") action.triggered.connect(kelin) action = menu.addAction("人人辭典") action.triggered.connect(renren)
browser.selectedNotes()能夠獲取到當前瀏覽界面所選中的卡牌note_id,然後再通過mw.col.getNote(note_id)可以獲取到卡牌的note。note中有兩個比較重要的內容一個是note[Front],和note[Back],其中note[Front]是卡牌的問題頁面內容即單詞,note[Back]是卡牌翻開之後的解釋即單詞解釋。我們要做的就是用note[Front]去查單詞解釋,然後將單詞解釋賦值給note[Back],最後note.flash(),mw.reset()就能將更新寫入Anki的資料庫。
from aqt import mw
def search_word(browser,type=0): # if type == 0: # showInfo(科林辭典) # else: # showInfo(人人詞典)
notes = [ mw.col.getNote(note_id) for note_id in browser.selectedNotes() ]
total = len(notes) n = 0 for note in notes: result = if type == 0: result = searchWord_kelin(note[Front]) else: result = searchWord_renren(note[Front]) if result == : # showInfo(查詢失敗,可以嘗試使用別的詞典) n += 1 else: # showInfo(查詢成功+note[Back]) note[Back] = result note.flush() mw.reset() msg = 查詢單詞+str(total)+個,其中+str(total-n)+個成功,+str(n)+個失敗 showInfo(msg)
上面就是Anki的具體操作了,至於怎麼獲取到單詞的解釋就很簡單了,我獲取的詞典網頁內容,然後截取的字元串,有興趣的可以看下代碼,