1918年和1922年,MargaretK.Odell和RobertC.Russell提出了Soundex方法,用来对姓氏进行编码,为所有美国人口做索引。Soundex是一种语音算法,根据英文单词的读音计算得到一个字符串值,形式为一个字母加3个数字[1]。例如Smith和Smyth的Soundex值都是S530。在一定程度上,这种算法能够为发音相近的单词产生相同的返回值,可用于基于英文发音的模糊匹配,在当今主流的数据库管理系统中都已经被实现。在中文的管理信息系统中,也存在大量根据发音查询数据的需求。例如,查询与“黎明”发音相同的人名字,则结果应包含“李明”、“李鸣”等,若只要求发音近似,则结果还应该包含“李民”、“李敏”等。基于中文发音的查询技术是非常重要的,用户使用它能够大大提高检索效率,对于特定行业,如学籍管理、户籍管理、酒店预定管理系统、电话查号服务系统、药品管理系统[2]等,有着突出的优势。1中文发音查询原理在汉字系统中,每个汉字都有一个或多个发音,发音包含声母、韵母和声调。中文发音查询是对数据库中的中文信息进行与发音有关的检索,而不仅仅是比较字面是否相同。按照不同的分类标准,中文发音查询存在多种实现技术。根据比较内容可分为声母查询和全音查询。前者一般用于快速查询,仅仅根据中文发音的声母来检索数据,如根据药品简称“amxl”就可以得到“阿莫西林”。由于该检索只以声母为依据,对返回的大量结果用户需要进一步筛选。全音查询则同时比较声母和韵母,一般不比较声调,结果较为精确,但是如果发音不准确就容易造成结果丢失。例如在酒店预定管理系统中,如果全音查询要求发音完全相同,则使用“limin”只能查询到“李敏”,而无法检索到“李明”的预定信息。根据精确度进行分类分为精确查询和模糊查询。精确查询要求发音(声母或全音)完全相同,结果集合较小,如使用“amxn”就无法查询到“阿莫西林”。模糊查询则按照一定的规则(如表1所示)进行检索,可得到发音近似的结果集合,从而方便用户的使用。例如,在酒店预定管理系统中,使用“limin”可以查询到“李明”。表1模糊发音规则表声母韵母z=zhan=angs=shen=engc=chin=ingl=nian=ianguan=uang根据实现级别的不同可分为宿主级查询、函数级查询和元级查询。宿主级查询指获取中文发音的功能主要在SQL的宿主语言中完成。首先由SQL从数据库中检索出汉字,宿主语言调用相应的方法得到其发音,再判断其是否满足发音条件[3];函数级查询一般需要更改数据库结构用于保存发音信息,通过在数据库中自定义函数获得发音来实现查询[2,4-5];元级查询指数据库管理系统软件提供的SQL本身就具有类似于Soundex的函数,可以获取中文发音,从而在系统元级上实现查询。宿主语言查询和函数级查询比较灵活,但是需要程序员自行编写相应的发音处理函数,如果将发音信息保存在用户数据库中,则会造成信息冗余,更新复杂等不便,往往还要结合触发器来保证中文和发音的一致性[5],这样数据库系统的运行效率得不到保证。元级查询需要SQL提供发音处理函数,在数据库管理系统的源代码级别上加以实现,执行速度在三者中是最快的。目前,数据库管理系统软件只提供了Soundex来处理英文发音,并没有考虑到其他语种。因此,现有文献讨论的中文发音查询技术均处于宿主级别或函数级别。一般情况下,可以结合3种分类法来区分不同的中文发音查询技术。例如,药品管理系统中使用ypmc字段保存药品名称,假如数据库管理系统本身提供了函数Soundex获取汉字的拼音,则可使用其来实现
mysql对韵母分组,基于MySQL的中文发音查询的元级实现
最新推荐文章于 2024-05-03 16:16:52 发布