我的單詞庫

李笑來運(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è)想的GUI界面

想實(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”。

GUI設(shè)計(jì)界面

【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é)合。

靜態(tài)文本和啟動(dòng)按鈕的建立

【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"。

動(dòng)態(tài)文本框的建立

【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; end

set(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-丁小梅

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容