摘 要:在英語(yǔ)學(xué)習(xí)中詞匯積累是基本功的重要組成部分。國(guó)內(nèi)大多英語(yǔ)專業(yè)學(xué)生在積累詞匯的過(guò)程中很大程度上要依靠各類便攜式的電子詞典。老師們對(duì)電子詞典的態(tài)度則褒貶不一。反對(duì)意見(jiàn)主要是對(duì)詞意的準(zhǔn)確性和全面性有所質(zhì)疑。因此,如何更好地發(fā)揮電子詞典的優(yōu)勢(shì),使其具備更多有益于學(xué)習(xí)的功能,是程序設(shè)計(jì)者必須思考的問(wèn)題。換而言之,電子詞典的程序設(shè)計(jì)不應(yīng)只屬于軟件開(kāi)發(fā)這一科目,而應(yīng)該是交叉于英語(yǔ)和軟件開(kāi)發(fā)之間的邊緣學(xué)科。
關(guān)鍵詞:詞匯學(xué);詞根;模糊查找;個(gè)人電腦
詞匯學(xué)習(xí)對(duì)英語(yǔ)學(xué)習(xí)的重要性不言而喻。就英語(yǔ)專業(yè)學(xué)生而言,詞匯學(xué)習(xí)不應(yīng)該是單一的背單詞,了解詞的構(gòu)造非常重要。認(rèn)識(shí)詞根詞綴可以幫助我們更好地記住難的單詞,甚至當(dāng)我們遇到從沒(méi)見(jiàn)過(guò)的單詞時(shí)能幫助我們猜出其意思。在認(rèn)識(shí)了一個(gè)單詞的詞根或詞綴之后,我們通常會(huì)聯(lián)想:還有哪些單詞也包含了這個(gè)詞根或詞綴?如,學(xué)習(xí)中碰到leukaemia一詞,通過(guò)構(gòu)詞的相關(guān)知識(shí)我們了解了這樣一些信息:“l(fā)euk” 是前綴 “l(fā)euc(o)-” (白色)的變形,“aem” 是一個(gè)與血液有關(guān)的詞根,“ia” 是表示疾病的后綴。通過(guò)詞根記憶法,了解包含 “aem” 的其他單詞,會(huì)為我們的詞匯拓展帶來(lái)很大收獲。但又應(yīng)該如何去收集這些單詞呢?遇到這類問(wèn)題,最先想到的辦法就是查字典,傳統(tǒng)的紙質(zhì)詞典通常以26個(gè)字母順序羅列單詞,先就首字母排序,相同的情況下就按第二個(gè)字母排序……很顯然這種編排不能完全滿足我們的要求:查找相同前綴的單詞尚可,后綴和詞根就很難查了。
電子詞典詞義精確性不如紙質(zhì)詞典,必須在查詞手段等方面展現(xiàn)優(yōu)勢(shì)才能得到用戶的認(rèn)可。在詞根詞綴查找的問(wèn)題上,電子詞典可通過(guò)軟件編程做到。遺憾的是現(xiàn)在很多電子詞典并未致力于此功能開(kāi)發(fā),一般個(gè)人電腦上的翻譯軟件也見(jiàn)不到。要查含某一詞根或詞綴的所有單詞,即要實(shí)現(xiàn)模糊查找功能,這很像電腦里搜索含某一關(guān)鍵字的文件名稱。筆者嘗試過(guò)在電腦上寫這樣一種程序,幫助我們完成這種模糊查找。
這里以Visual Basic 6.0為開(kāi)發(fā)平臺(tái)作下說(shuō)明——這是一款功能不強(qiáng)但比較容易上手的開(kāi)發(fā)軟件。詞庫(kù)選擇Excel電子表格格式,只包含兩個(gè)縱列,第一列(“A”)是單詞,第二列(“B”)是釋義。當(dāng)然使用其他更常見(jiàn)的數(shù)據(jù)庫(kù)格式如Access也未嘗不可。由于VB 6.0的兼容性對(duì)Access版本比較挑剔,故在此使用Excel。我們要實(shí)現(xiàn)的首要目的,是通過(guò)搜索單詞當(dāng)中幾個(gè)連續(xù)的字母來(lái)對(duì)滿足條件的單詞做篩選。VB本身和其Excel接口都可以實(shí)現(xiàn)。就VB本身來(lái)講,用字符串函數(shù)InStr()即可。具體代碼操作如下:
Set xl App=Create Object(“Excel.Application”) 獲取EXCEL進(jìn)程
Set xl Book=xl App.Workbooks.Open(App.Path +“\glossary.xls”) 使用詞庫(kù)Excel文檔
Set xl Sheet=xl Book.Worksheets(“SheetA”) 使用工作表
…
If InStr(1,Trim(xl Sheet.Cells(idx,1)),Trim(txt Input.Text)+ “,”)<>0 Then
判斷文本框中輸入的條件能否在表中找到,若找到,返回非0值。
lstWord.AddItem (xlSheet.Cells(i,1))單詞滿足條件,添入列表框。
sum=sum+1
If sum>=100 Then
MsgBox “符合條件的單詞太多,未完全列出!”, vbOKOnly,“提示”
Exit Sub
End If
End If
工作表中的搜索位置列號(hào)不會(huì)發(fā)生變化,而行號(hào)要依次遍歷,故使用變量i,再將自加語(yǔ)句和Go To語(yǔ)句相結(jié)合,就可以查看詞庫(kù)中每一個(gè)單詞是否滿足要求。
若輸入與血液有關(guān)的“aem”,則haemoglobin,haemophiliac, uraemia等相關(guān)單詞都出現(xiàn)在列表當(dāng)中。這種程序設(shè)計(jì)方案可以達(dá)到我們的要求,但需要先從詞庫(kù)中讀出數(shù)據(jù),再用VB的自帶函數(shù)進(jìn)行比較、輸出,運(yùn)行速度太慢,使用VB的Excel接口可以大大提高速度,編程思路基本一致,不同的是要把InStr()函數(shù)替換為如下代碼:
Locate Cell=xl Sheet.Range(“A”+CStr(pointer)+“:A”+CStr(i)).Find(Trim(txt Input.Text)).Row此處使用變量控制搜索的行列范圍,CStr(pointer)和CStr(idx)都是Excel的行號(hào),字符A為固定的列號(hào)范圍。如要搜索第1行第一列至第500行第一列這樣一個(gè)范圍,此處生成的搜索范圍就將是“A1:A500”,之后將滿足搜索結(jié)果的行號(hào)返回給變量LocateCell. 僅憑此一行代碼,可將包含關(guān)鍵字的單詞全數(shù)讀出,僅剩的內(nèi)容就是把LocateCell所示行號(hào)的單元格內(nèi)容輸出到列表框,語(yǔ)句為:lstWord.AddItem(xlSheet.Cells(Val(LocateCell),1))。用這種方法,程序運(yùn)行速度會(huì)提高很多。
然而這種速度高的代碼也存在一個(gè)問(wèn)題,如果在所定義的搜索范圍內(nèi)一個(gè)滿足條件的數(shù)據(jù)都找不到的話,程序會(huì)出錯(cuò)崩潰。因此,該語(yǔ)句前面有必要增加一條錯(cuò)誤處理語(yǔ)句:
On Error Go to Handler
“Handler”是程序開(kāi)發(fā)人員自定義的代碼標(biāo)記行,放在子程序里加個(gè)冒號(hào)標(biāo)明,后面再用MsgBox信息框說(shuō)明沒(méi)有找到符合條件的單詞。
前綴和后綴搜索基本思路差不多,搜索后綴時(shí)先獲取所輸入搜索條件的字符串長(zhǎng)度,該長(zhǎng)度可通過(guò)Len(Trim(txt Input.Text))得到,再通過(guò)條件判斷語(yǔ)句將其與詞庫(kù)中的單詞長(zhǎng)度Len(xl Sheet.Cells(idx,1))做對(duì)比,濾掉比搜索條件字母少的單詞。之后再通過(guò)判斷邏輯語(yǔ)句Right(RTrim(xl Sheet.Cells(idx, 1)), Input Length) =Trim(txt Input.Text)的真假值,找出滿足后綴條件的單詞。搜索前綴時(shí)同樣需要先濾掉比搜索條件字母少的單詞,之后再判斷詞首是否包含搜索條件所定義的字符串,只是最后的Right函數(shù)改為L(zhǎng)eft函數(shù)。
本程序設(shè)計(jì)是以PC機(jī)為硬件平臺(tái),如果使用JavaScript等其他高級(jí)語(yǔ)言,采用同樣的編程思路,可以將該程序移植于袖珍電子詞典、移動(dòng)電話等便攜設(shè)備。客觀來(lái)講,電子詞典在與傳統(tǒng)紙質(zhì)字典的優(yōu)劣對(duì)比中,很多方面要處于下風(fēng),如詞義精確性、可視化程度、語(yǔ)法搭配解釋、例句豐富程度等。因此,要想得到更多用戶的認(rèn)可,就只能在更大程度上利用電子技術(shù)不可替代的特點(diǎn),在查找這一個(gè)環(huán)節(jié)顯露出自己的優(yōu)勢(shì),這樣的電子詞典才能有真正的生命力。
參考文獻(xiàn):
汪榕培,盧曉娟.英語(yǔ)詞匯學(xué)教程[M].上海:上海外語(yǔ)教學(xué)出版社,2005-01.
作者簡(jiǎn)介:楊明,男1979年1月出生,碩士,就職于四川外國(guó)語(yǔ)大學(xué)成都學(xué)院,研究方向:比較文學(xué)和世界文學(xué)。