李笑來運(yùn)用自己的計(jì)算機(jī)技能寫了個(gè)自動(dòng)化腳本,運(yùn)用統(tǒng)計(jì)和概率知識(shí)在自己創(chuàng)建的TOEFL真題語料庫里進(jìn)行分析,最終挑出2141個(gè)詞匯,寫成《TOEFL核心詞匯21天突破》,長銷不衰。
我能否也能利用現(xiàn)有的知識(shí),建立一個(gè)自己的單詞庫,并實(shí)時(shí)更新呢?
001 idea
這是我初期設(shè)想的功能界面圖:

想實(shí)現(xiàn)功能:
1)建立自己的生詞庫
2)可知單詞的錯(cuò)誤率
3)錯(cuò)誤率前十的單詞
002 前期準(zhǔn)備
a) 新建一個(gè)文件夾
命名為GUI_matlab,接下來所有的文檔都存在這個(gè)文件夾里,方便查找
b) 新建一個(gè)Excel
命名為myExample,用于存放單詞及其錯(cuò)誤率。即建立你的單詞庫
c) 安裝matlab
我用的是2016b版
003 主程序
程序邏輯為:
【step1】讀取單詞庫。
即讀取 myExample.xlsx 中的單詞和單詞錯(cuò)誤率
【step2】判斷操作。
當(dāng)輸入一個(gè)新單詞時(shí),判斷其是否已存在于原單詞庫中。如存在,相應(yīng)的錯(cuò)誤率+1。如不存在,寫入表單最后一行,相應(yīng)的錯(cuò)誤率設(shè)為1
【step3】排序。
將單詞庫按錯(cuò)誤率由高到低重新排序
【step4】保存。
將新操作后的單詞庫同步保存到 myExample.xlsx 中
004 GUI界面
【step1】設(shè)計(jì)界面。
在matlab中新建一個(gè)“Blank GUI (Default)”界面。操作順序?yàn)椋骸靶陆ā薄癆PP”——“GUIDE”。

【step2】靜態(tài)文本的建立。
點(diǎn)擊左側(cè)工具欄的“TXT”功能鍵,建立靜態(tài)文本。雙擊靜態(tài)文本修改相應(yīng)參數(shù)。修改字體大小:“Frontsize”改成20。修改文本:“String”改成Input。修改屬性:"Tag"改成text1。點(diǎn)擊文本框,通過上下左右鍵可操控位置。
需要說明的是文本內(nèi)容和字體大小可根據(jù)需要修改,Tag屬性是該文本框(無論是靜態(tài)文本還是動(dòng)態(tài)文本)的唯一屬性。之后的程序中會(huì)用到。
“Freq.”和序列文本同理建立。其Tag屬性依次為為“text2”、“text3”、......、"text12"。
點(diǎn)擊左側(cè)工具欄的“OK”按鈕,建立啟動(dòng)功能。修改文本:“String”改成“10 words ahead:”。修改字體大?。骸癋rontsize”改成20。這里為以美化外觀,就未重新設(shè)立啟動(dòng)按鈕,而是把啟動(dòng)功能按鈕和文本顯示相結(jié)合。

【step3】動(dòng)態(tài)文本的建立。
點(diǎn)擊左側(cè)工具欄的“EDIT”功能鍵,建立動(dòng)態(tài)文本。雙擊動(dòng)態(tài)文本修改相應(yīng)參數(shù)。修改字體大?。骸癋rontsize”改成20。修改文本:刪除“String”默認(rèn)值。修改屬性:"Tag"改成edit1。點(diǎn)擊文本框,通過上下左右鍵可操控位置。將“edit1”動(dòng)態(tài)文本框移至靜態(tài)文本框“Input”后,用于輸入新單詞。
靜態(tài)文本“Freq.”和“1”~“10”后同樣設(shè)置相應(yīng)的動(dòng)態(tài)文本框,用于顯示單詞錯(cuò)誤率和錯(cuò)誤前十的單詞。其Tag屬性依次為為“edit2”、“edit3”......"edit12"。

【step4】程序?qū)搿?/b>
將建立的GUI界面保存至當(dāng)初建立的文件夾中,命名為gui。從視圖菜單欄中打開編輯器,找到pushbutton1_Callback程序,即按鈕程序(啟動(dòng)程序)。在此程序的基礎(chǔ)上,添加“003 主程序”:
[numdata,textdata,alldata]=xlsread('myExample.xlsx');%textdata存單詞b=xlsread('myExample.xlsx','sheet1','B:B');? %b存相應(yīng)的頻率
str=get(handles.edit1,'string');? %在edit1動(dòng)態(tài)文本框內(nèi)輸入單詞
%判斷單詞是否出現(xiàn)過,并作出相應(yīng)的響應(yīng)
i=0;TF=0;
%判斷是否是新單詞
while(TF==0&&i<size(textdata,1))? %兩個(gè)單詞不一樣? ? ? ? ? i=i+1;TF=strcmp(textdata(i,1),str);end
if i==size(textdata,1)? %如果是,就新加入? ? textdata(i+1,1)=cellstr(str);b(i+1)=1;freq=1;
else b(i,1)=b(i,1)+1;freq=b(i,1);%如果不是,該單詞搜索頻率+1; endset(handles.edit2,'string',freq);? %輸出錯(cuò)誤率
%篩選頻率次數(shù)最高的十個(gè)單詞
[bb,I]=sortrows(b,-1);? %按頻率高低排列
for j=1:size(textdata,1)? ? %將對(duì)應(yīng)的單詞重新排序? ? textdata2(j,2)=textdata(I(j,1),1);end
for k=1:size(textdata,1)? %重新更新新操作后的單詞庫? ? textdata(k,1)=textdata2(k,2);end
xlswrite('myExample.xlsx',textdata);? %將單詞重新寫入Excelxlswrite('myExample.xlsx',bb,1,'B1');? %將錯(cuò)誤率重新寫入Excel
%顯示錯(cuò)誤率前十的單詞
set(handles.edit3,'string',textdata2(1,2));set(handles.edit4,'string',textdata2(2,2));set(handles.edit5,'string',textdata2(3,2));set(handles.edit6,'string',textdata2(4,2));set(handles.edit7,'string',textdata2(5,2));set(handles.edit8,'string',textdata2(6,2));set(handles.edit9,'string',textdata2(7,2));set(handles.edit10,'string',textdata2(8,2));set(handles.edit11,'string',textdata2(9,2));set(handles.edit12,'string',textdata2(10,2));
【step5】運(yùn)行。
點(diǎn)擊運(yùn)行按鈕。在Input后輸入相應(yīng)的單詞,隨即其錯(cuò)誤率和單詞庫中錯(cuò)誤率前十的單詞就會(huì)顯示在GUI界面上。

示例說明:運(yùn)行g(shù)ui.m程序后,出現(xiàn)原先設(shè)計(jì)的GUI界面。在Input方框內(nèi)輸入“reissue”單詞,點(diǎn)擊“10 words ahead”,隨機(jī)可知該單詞的錯(cuò)誤率為9,說明該單詞出現(xiàn)了九次,每次我都沒有記住,并試圖將它放入我的單詞庫。我的詞庫內(nèi)最記不住的前十名單詞也都一目了然。
005 后記
雖然用matlab實(shí)現(xiàn)這樣一個(gè)功能很low,雖然這個(gè)單詞庫還不完善,雖然花費(fèi)了我兩天半的時(shí)間,但還是很有成就感的~
4213-丁小梅