摘要:系统增加一种功能,即通过音标来查询单词,同时加入模糊查询功能,使查询方式更加灵活和全面。详细地说明了系统的设计思想和实现技术。
关键词:按发音查询 电子词典 模糊查询
目前的各类电子词典系统在查询速度、词库容量等方面都日趋完善。用户在英文阅读时,可以方便快捷地查找生词的词义、用法、同义词或反义词。然而,就使用方式来讲,仍存在欠缺。当人们听英语广播、看英语节目或练习听力时听到一个词的发音而又不知其含义时,又如何查到单词的含义呢?按传统的方法,只能先根据单词发音猜测单词的拼写,然后再查词典。由于英文单词拼写不规范,这种查询的效率必然很低。
为此,应寻求另一种查询途径。旨在通过音标输入,根据单词发音直接进行查询,并配合模糊查询算法,从而为这一问题的解决找到一条途径。整个设计涉及到音标的提取和输入、范例数据库的建立、模糊查询算法、界面的设计等。
1 音标的提取和输入
系统设计首先考虑音标字库问题。Windows自带的音标符号不全且不方便引入,而一些商用软件,如金山公司的KingSoft Phonetic音标字体则包含了英式音标所需要的基本符号,可在开发中引入该字体。当然,要以合法方式获得。其方法是在装有金山词霸的系统中找到Ksphonet.ttf,将其拷贝到开发系统中,安装此字体即可。开发时,将窗口缺省字体设置为KingSoft Phonetic;,在程序发布安装过程中自动为目标机安装该字体。
由于无论是建立样例数据库还是系统运行时进行查询,都涉及到音标的录入,而通过键盘进行录入显然不方便。所以在程序窗口中设置一个音标输入面板,通过点击面板中的按钮来录入对应的音标;还应对面板中的按键排列做规划,例如,双元音按钮排列在一个区,方便录入,见。
2 样例数据库的设计
本电子词典系统利用MS Access 2000建立了一个含500个单词左右的样例词库,并使用MS Visual C++6.0作为前端工具,采用DAO技术实现对样例数据库的访问。
虽然本词库的规模较小,但应当体现出词典在词语分布上的特点。所以,特根据《郎文英汉双解词典》做粗略统计,得出数据如表1所示。其中,x、z按所占比例算不足一词,均按一词计。
表1 单词选取分布表
首字母 | 所占百分比(%) | 词库中单词数(个) | 首字母 | 所占百分比(%) | 词库中单词数(个) |
a | 5.12 | 26 | N | 2.15 | 11 |
b | 6.07 | 30 | O | 2.09 | 10 |
c | 9.99 | 50 | P | 2.09 | 44 |
d | 5.69 | 28 | Q | 0.44 | 2 |
e | 3.48 | 17 | R | 5.57 | 28 |
f | 5.63 | 28 | S | 11.70 | 59 |
g | 3.54 | 18 | T | 5.00 | 25 |
h | 3.92 | 20 | U | 1.58 | 8 |
i | 3.61 | 18 | V | 1.58 | 8 |
j | 0.76 | 4 | W | 3.61 | 18 |
k | 3.29 | 16 | Y | 0.25 | 1 |
m | 5.12 | 26 | Z | 0.13 | 1 |
数据库字段设计如下:
Yinbiao | Eword | Cword |
其中,Yinbiao存放单词的音标,并作为主关键字;Eword为英文单词;Cword为单词的中文释义。
3 模糊查询处理
3.1 实时匹配的处理
系统可以以两种方式进行查询:按词查询和按音标查询。限于篇幅,本文只讨论后者。样例数据库中以音标字段作为主键,对于每一输入,系统都进行匹配,将相近的结果显示出来。例如,用户输入:a:则列表提示:art,arm,army,artist,article…等;若用户输入:a:t,则列表提示:art,artist,article…等。如用户的输入无法完全匹配,则从列表中选择个匹配作为查询结果或提示用户手动选择相近的词条。
3.2 重音的处理
英语中多音节单词都有各类重音,在音标中用重音符号标记。重音符号完全可以参加匹配查询,但考虑到查询复杂度和实用性,不将重音符号作为查询的一部分,即输入的重音符号在音询时经过预先处理过滤掉重音号。重音符号只用于建立样例数据库中的音词条目,以便在查询结果中正确地显示单词的完整音标。对于音标相同重音不同的单词,同时给出释义。
3.3 模糊查询处理
基于音标的模糊查询,类似于很多输入法提供的“南方模糊音”功能,即以用户潜在的由于音标读音相似产生的输入错误为基础,对无法直接匹配的输入进行相似的代换并对每一种代换进行查找。例如对于音标tr很容易与音标t∫混淆,因此对于可能出现的习惯上的错误对音标进行查询的等价类划分,本系统做了如下划分:
需要说明的是,这种划分只是来源于实际的经验,衡量任何一种划分成功与否必须通过音标的错误使用统计和用户的反馈来确定。对于正常查询无法查得的音标,用户可以有选择地应用以上的等价代码重新进行查找。但应用等价代换会非常显著地降低查询效率,因此必须对查询的规模进行限制,如多开启三个等价集或者进行重新等价划分等。
另外对于比较长的音标输入,可以将音标输入的前一半或者1/3长度作为模糊查询的输入依据,这样模糊查询的范围虽然会有所扩大,但是却节省了查询浪费的时间。总之,以等价代换查询为基础,可以采用很多策略来限制查询的复杂度,但是具体哪一种策略更好,需要对音标构成和用户输入习惯做大量的统计和实验得出。查询流程如所示。
在具体的实现上,使用了递归函数,其基本算法如下:
FuzzySearch(Cstring str,int n){
Length=str.GetLength();
if(length<=n){
ExactSearch(str); //完全匹配查找
return;
}
else {//对第n个字母进行搜索寻找等价代换;
//如果找到则从该等价个字母开始进行代换;
//代换后的音标str2作为递归入口送入;
FuzzySearch(str2,n+1);
//同样的str3、str4;
FuzzySearch(str3,n+1);
FuzzySearch(str4,n+1);
//对于双元音代换,则是:
FuzzySearch(str5,n+2);
//如无法找到等价代换,则:
FuzzySearch(str,n+1);
}
}
对已输入的音标先进行完全匹配,如完全匹配挫败则对已输入音标(刚输入的音标)进行等价集代换,并把模糊查询的结果添加到列表,作为进一步模糊查询的基础。由于缩小了搜索范围,在速度上有一定优势。
4 界面设计
界面以及风格的设计已成为Windows编程十分重要的一环,合理的设计会提高用户使用效率。如果采用英式音标输入,则至少需要44个音标按钮。另一种方案是省略双元音和某些由两个音标符号组成的辅音(如t∫)由用户自行输入t和∫,这样可以减少面板上音标按钮的数量。但多数人在学习音标时,习惯上是将双元音作为一个整体为记忆,折开后反而不自然。所以,面板排列由44个音标按钮组成,为方便用户快速录入,将其按习惯分成三个区,即单元音区、双元音区和辅音区,并将发音相似的音标排列在一起,如所示。
本系统的设计与实现具有很强的实用价值。将本系统所带的词库进行扩充,即可形成标准的电子词典系统。若将本系统的算法加以固化,即可形成固件产品,具有很好的应用前景。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。