摘 要:在英语学习中词汇积累是基本功的重要组成部分。国内大多英语专业学生在积累词汇的过程中很大程度上要依靠各类便携式的电子词典。老师们对电子词典的态度则褒贬不一。反对意见主要是对词意的准确性和全面性有所质疑。因此,如何更好地发挥电子词典的优势,使其具备更多有益于学习的功能,是程序设计者必须思考的问题。换而言之,电子词典的程序设计不应只属于软件开发这一科目,而应该是交叉于英语和软件开发之间的边缘学科。
关键词:词汇学;词根;模糊查找;个人电脑
词汇学习对英语学习的重要性不言而喻。就英语专业学生而言,词汇学习不应该是单一的背单词,了解词的构造非常重要。认识词根词缀可以帮助我们更好地记住难的单词,甚至当我们遇到从没见过的单词时能帮助我们猜出其意思。在认识了一个单词的词根或词缀之后,我们通常会联想:还有哪些单词也包含了这个词根或词缀?如,学习中碰到leukaemia一词,通过构词的相关知识我们了解了这样一些信息:“leuk” 是前缀 “leuc(o)-” (白色)的变形,“aem” 是一个与血液有关的词根,“ia” 是表示疾病的后缀。通过词根记忆法,了解包含 “aem” 的其他单词,会为我们的词汇拓展带来很大收获。但又应该如何去收集这些单词呢?遇到这类问题,最先想到的办法就是查字典,传统的纸质词典通常以26个字母顺序罗列单词,先就首字母排序,相同的情况下就按第二个字母排序……很显然这种编排不能完全满足我们的要求:查找相同前缀的单词尚可,后缀和词根就很难查了。
电子词典词义精确性不如纸质词典,必须在查词手段等方面展现优势才能得到用户的认可。在词根词缀查找的问题上,电子词典可通过软件编程做到。遗憾的是现在很多电子词典并未致力于此功能开发,一般个人电脑上的翻译软件也见不到。要查含某一词根或词缀的所有单词,即要实现模糊查找功能,这很像电脑里搜索含某一关键字的文件名称。笔者尝试过在电脑上写这样一种程序,帮助我们完成这种模糊查找。
这里以Visual Basic 6.0为开发平台作下说明——这是一款功能不强但比较容易上手的开发软件。词库选择Excel电子表格格式,只包含两个纵列,第一列(“A”)是单词,第二列(“B”)是释义。当然使用其他更常见的数据库格式如Access也未尝不可。由于VB 6.0的兼容性对Access版本比较挑剔,故在此使用Excel。我们要实现的首要目的,是通过搜索单词当中几个连续的字母来对满足条件的单词做筛选。VB本身和其Excel接口都可以实现。就VB本身来讲,用字符串函数InStr()即可。具体代码操作如下:
Set xl App=Create Object(“Excel.Application”) 获取EXCEL进程
Set xl Book=xl App.Workbooks.Open(App.Path +“\glossary.xls”) 使用词库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
工作表中的搜索位置列号不会发生变化,而行号要依次遍历,故使用变量i,再将自加语句和Go To语句相结合,就可以查看词库中每一个单词是否满足要求。
若输入与血液有关的“aem”,则haemoglobin,haemophiliac, uraemia等相关单词都出现在列表当中。这种程序设计方案可以达到我们的要求,但需要先从词库中读出数据,再用VB的自带函数进行比较、输出,运行速度太慢,使用VB的Excel接口可以大大提高速度,编程思路基本一致,不同的是要把InStr()函数替换为如下代码:
Locate Cell=xl Sheet.Range(“A”+CStr(pointer)+“:A”+CStr(i)).Find(Trim(txt Input.Text)).Row此处使用变量控制搜索的行列范围,CStr(pointer)和CStr(idx)都是Excel的行号,字符A为固定的列号范围。如要搜索第1行第一列至第500行第一列这样一个范围,此处生成的搜索范围就将是“A1:A500”,之后将满足搜索结果的行号返回给变量LocateCell. 仅凭此一行代码,可将包含关键字的单词全数读出,仅剩的内容就是把LocateCell所示行号的单元格内容输出到列表框,语句为:lstWord.AddItem(xlSheet.Cells(Val(LocateCell),1))。用这种方法,程序运行速度会提高很多。
然而这种速度高的代码也存在一个问题,如果在所定义的搜索范围内一个满足条件的数据都找不到的话,程序会出错崩溃。因此,该语句前面有必要增加一条错误处理语句:
On Error Go to Handler
“Handler”是程序开发人员自定义的代码标记行,放在子程序里加个冒号标明,后面再用MsgBox信息框说明没有找到符合条件的单词。
前缀和后缀搜索基本思路差不多,搜索后缀时先获取所输入搜索条件的字符串长度,该长度可通过Len(Trim(txt Input.Text))得到,再通过条件判断语句将其与词库中的单词长度Len(xl Sheet.Cells(idx,1))做对比,滤掉比搜索条件字母少的单词。之后再通过判断逻辑语句Right(RTrim(xl Sheet.Cells(idx, 1)), Input Length) =Trim(txt Input.Text)的真假值,找出满足后缀条件的单词。搜索前缀时同样需要先滤掉比搜索条件字母少的单词,之后再判断词首是否包含搜索条件所定义的字符串,只是最后的Right函数改为Left函数。
本程序设计是以PC机为硬件平台,如果使用JavaScript等其他高级语言,采用同样的编程思路,可以将该程序移植于袖珍电子词典、移动电话等便携设备。客观来讲,电子词典在与传统纸质字典的优劣对比中,很多方面要处于下风,如词义精确性、可视化程度、语法搭配解释、例句丰富程度等。因此,要想得到更多用户的认可,就只能在更大程度上利用电子技术不可替代的特点,在查找这一个环节显露出自己的优势,这样的电子词典才能有真正的生命力。
参考文献:
汪榕培,卢晓娟.英语词汇学教程[M].上海:上海外语教学出版社,2005-01.
作者简介:杨明,男1979年1月出生,硕士,就职于四川外国语大学成都学院,研究方向:比较文学和世界文学。