葉 鈺,李太寧
(1.泰州職業(yè)技術(shù)學(xué)院電子信息與工程系;2.泰州市心生軟件有限公司,江蘇 泰州 225300)
基于web的拼音首字母快速查詢的設(shè)計(jì)與實(shí)現(xiàn)
葉 鈺1,李太寧2
(1.泰州職業(yè)技術(shù)學(xué)院電子信息與工程系;2.泰州市心生軟件有限公司,江蘇 泰州 225300)
文章簡(jiǎn)述了現(xiàn)有的操作系統(tǒng)和應(yīng)用軟件對(duì)中文編碼支持的情況,對(duì)現(xiàn)有的常用拼音首字母快速查詢方案進(jìn)行剖析。提出了新的解決思路,從理論、設(shè)計(jì)思路、具體操作等多方面對(duì)其進(jìn)行深度講解,快速提高了通過(guò)拼音首字母快速查詢到漢字,為拼音首字母的快速查詢提供了一種較新的思想和一種可實(shí)施的方案。
拼音;通訊錄;中文編碼;數(shù)據(jù)庫(kù)
眾所周知,漢字是世界上編碼最復(fù)雜的語(yǔ)言,在Unicode5.0的99089個(gè)字符中,有71226個(gè)字符與漢字有關(guān)。而如何在這么多漢字中,用鍵盤上的二十六個(gè)英文字母就能快速定位到想要的各種漢字組合,是一項(xiàng)極其復(fù)雜的計(jì)算。通過(guò)開(kāi)發(fā)科研項(xiàng)目《基于web的通訊錄管理系統(tǒng)》時(shí)就遇到了這一問(wèn)題!經(jīng)過(guò)課題組成員的反復(fù)思考、論證、總結(jié),最后提出了該構(gòu)想。
隨著經(jīng)濟(jì)的發(fā)展與需要,漢字編碼標(biāo)準(zhǔn)也在不斷發(fā)展。按照發(fā)布時(shí)間,漢字編碼標(biāo)準(zhǔn)順序大致有GB2312、GBK、GB13000.1、GB18030-2000、GB18030-2005等。windows95中文版支持GB2312的七千多個(gè)漢字,從windows98到現(xiàn)在的windows7中文版才開(kāi)始支持GBK。雖然2001年,Microsoft開(kāi)發(fā)了Windows補(bǔ)丁,用于支持GB18030-2000標(biāo)準(zhǔn),但是并沒(méi)有普及到所有Windows系統(tǒng)中,而對(duì)于2005年頒布的GB18030-2005標(biāo)準(zhǔn),微軟到現(xiàn)在也沒(méi)使用在Windows桌面操作系統(tǒng)。對(duì)中文支持最好的Windows都如此,其他的諸如Linux等操作系統(tǒng)對(duì)中文的支持就更差了。
開(kāi)發(fā)軟件中,對(duì)中文支持最好的應(yīng)該算是Microsoft的.Net Framwork開(kāi)發(fā)環(huán)境與Oracle的Java Runtime Environment,這兩種開(kāi)發(fā)平臺(tái)都支持GBK以及Unicode4.0。但是目前要想支持GB18030-2000以上國(guó)內(nèi)標(biāo)準(zhǔn)或Unicode4.0以上版本的國(guó)際標(biāo)準(zhǔn),都還需要安裝補(bǔ)丁來(lái)實(shí)現(xiàn)。應(yīng)用軟件中如瀏覽器,只有IE能夠較好的支持GBK標(biāo)準(zhǔn)內(nèi)的所有漢字,其他瀏覽器諸如Firefox3、Chrome10等如今市場(chǎng)占有率排在前端的瀏覽器,都沒(méi)有很完整的支持GBK以及Unicode4標(biāo)準(zhǔn)內(nèi)的所有漢字。由此可見(jiàn),各種操作系統(tǒng)以及各種應(yīng)用軟件,對(duì)中文編碼標(biāo)準(zhǔn)的支持并不重視。
綜上所述,現(xiàn)有的通過(guò)拼音首字母快速找到漢字的方法有的是基于操作系統(tǒng),有的是基于開(kāi)發(fā)環(huán)境,因此都會(huì)有一定的局限性。為解決這一問(wèn)題,有些軟件考慮采用GBK標(biāo)準(zhǔn)為主,因?yàn)镚BK標(biāo)準(zhǔn)終究是國(guó)標(biāo),它較多的考慮到了漢字與漢語(yǔ)拼音的對(duì)應(yīng)關(guān)系,所有漢字編碼都采用拼音排序的方法,從“啊”字開(kāi)始,以26個(gè)英文字母為順序依次將所有漢字進(jìn)行編碼。這種方法的優(yōu)點(diǎn)是代碼量少,運(yùn)行所需資源也最少,缺點(diǎn)是遇到多音字的時(shí)候無(wú)法識(shí)別,也無(wú)法查找漢字的全拼。
以往的研究往往到此為止,開(kāi)發(fā)人員都認(rèn)為能夠?qū)h字轉(zhuǎn)換成標(biāo)準(zhǔn)的拼音,就已經(jīng)能夠完美解決根據(jù)拼音快速查詢漢字的功能了。其實(shí)不然,談到查詢,關(guān)鍵在如何檢索;談到檢索,無(wú)法避免的要提到檢索效率:資源占用、速度、重碼率、以及代碼編寫的編碼量等。為避免這些問(wèn)題,有些開(kāi)發(fā)者在待檢索數(shù)據(jù)庫(kù)中增加一個(gè)列,用于存儲(chǔ)待檢索中文的首字母(如果一張表中有多個(gè)列都需要用拼音首字母檢索,那么就需要增加多個(gè)列)。這種方法的好處是,在實(shí)現(xiàn)具體功能的時(shí)候非常簡(jiǎn)單,因?yàn)镾QL語(yǔ)句對(duì)此有很好的支持。例如當(dāng)用戶輸入zh,那么對(duì)應(yīng)的SQL語(yǔ)句為:select realname from person where realname _py like'zh%';但這種方法不僅給數(shù)據(jù)庫(kù)增加了冗余,同時(shí)也不能很好的解決多音字的問(wèn)題。因此急需要一個(gè)新的解決方案,在通過(guò)大量測(cè)試的情況下設(shè)計(jì)了如下的方案。
假定目標(biāo)是用戶在瀏覽器的文本框中輸入聯(lián)系人的拼音首字母,要求從聯(lián)系人表person中將姓名realname首字母相同的查找出來(lái)給用戶選擇?,F(xiàn)設(shè)計(jì)如下:
根據(jù)流程圖設(shè)計(jì)數(shù)據(jù)庫(kù)realname,其中包含三個(gè)表,存放漢字拼音編碼的編碼表的pinyin表、存放聯(lián)系人信息的person表、存放系統(tǒng)詞庫(kù)的pinyin_word表。這三張表的簡(jiǎn)單結(jié)構(gòu)如下:CREATETABLE`pinyin`(
其中pinyin表中存放的是GBK規(guī)范中的兩萬(wàn)多個(gè)漢字與其拼音對(duì)照的數(shù)據(jù),包括多音字在內(nèi)。person表中存放的是聯(lián)系人信息。pinyin_word表中存放的是系統(tǒng)中需要根據(jù)拼音首字母查詢中文的所有中文與其拼音的對(duì)應(yīng)表,起到詞庫(kù)的作用。大致實(shí)現(xiàn)過(guò)程為:每當(dāng)用戶向系統(tǒng)中插入一條聯(lián)系人信息時(shí),將其對(duì)應(yīng)的拼音查找出來(lái),并插入到pinyin_word表中。如果有多音字存在則生成多條記錄。當(dāng)用戶根據(jù)拼音首字母查找時(shí),首先到詞庫(kù)表中查找對(duì)應(yīng)的中文,并將查找到的中文傳遞到用戶的聯(lián)系人表中查詢,如果存在,則顯示到WEB界面中供用戶選擇。考慮到效率,當(dāng)重碼較多的時(shí)候,比如剛輸入第一個(gè)字母的時(shí)候,并不是將所有的結(jié)果都送到用戶的聯(lián)系人表中查找,只是將前n個(gè)結(jié)果送到聯(lián)系人表中查找,例如只選取前10個(gè)結(jié)果生成一條SQL語(yǔ)句:select realname from person where realname='張三'or realname='張四'or...不用擔(dān)心這種只選取n個(gè)結(jié)果的方法會(huì)影響到用戶體驗(yàn),因?yàn)楫?dāng)重碼太多的時(shí)候,用戶界面中并沒(méi)有足夠大的地方顯示,另外用戶也不會(huì)在幾十個(gè)候選項(xiàng)中敲擊幾十次鍵盤選中想要的選項(xiàng)。具體流程圖如下圖1。
新的解決方法與目前市場(chǎng)占有率比較高的搜狗、谷歌拼音輸入法所采用的原理相同。漢字的數(shù)量與中文詞語(yǔ)的數(shù)量雖然十分龐大,但是對(duì)于某個(gè)用戶來(lái)說(shuō),其常用到的字、詞數(shù)量是一個(gè)相對(duì)小的集合。當(dāng)用戶在拼音輸入法中輸入過(guò)一次的詞,下一次就會(huì)自動(dòng)顯示在候選項(xiàng)的前幾個(gè),而可能用到的專業(yè)詞語(yǔ)則采用詞庫(kù)文件的形式存儲(chǔ)。詞庫(kù)文件可以放在服務(wù)器上,放在云上,這樣既能脫離操作系統(tǒng)和開(kāi)發(fā)環(huán)境又能快速更新。通過(guò)總結(jié)與實(shí)驗(yàn),這種方法執(zhí)行效率是最高的,可移植性是最好的,用戶的體驗(yàn)是較完美的。該設(shè)想應(yīng)用在《基于web的通訊錄管理系統(tǒng)》的項(xiàng)目中,經(jīng)過(guò)測(cè)試,該方案完善的解決了可快速的通過(guò)拼音首字母查詢中文,為用戶提供了更加友好的界面,用戶反響良好。
[1]白中英.計(jì)算機(jī)組成原理[M].北京:科學(xué)出版社,2000.
[2]呂浩勇.VFP中漢字拼音首字母的獲取及應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2005,(12):118-119.
[3]薩師煊,王珊.數(shù)據(jù)庫(kù)系統(tǒng)概論[M].北京:高等教育出版社, 2001.
Design and Implementation ofQuick Query Based on the First LetterofWeb
YEYu1,LITai-ning2(1.TaizhouPolytechnicCollege;2.TaizhouThankinSoftware,TaizhouJiangsu,225300,China)
Thispaperbriefly narrates the currentcondition how existing operating system and application software support the Chinese code,and analyzes the existing common fastsearch program w ith the first letter.A new idea is put forward and in-depth explanation in theory,design ideas,the specific operation is given.In thatway speed increase in searching the Chinese character w ith first letter can be realized.This idea has been certified by doing the research project of Taizhou Polytechnic Institute "Web-based ContactsManagementSystem.A new idea and a solution are provided for fastsearch program w ith the first letter.
alphabet;contacts;Chinese code;database
J292.33
B
1671-0142(2011)03-0095-03
葉鈺(1977-),女,江蘇泰州人,講師,碩士,研究方向?yàn)檐浖_(kāi)發(fā),服務(wù)器管理.
(責(zé)任編輯 施 翔)