葉 鈺,李太寧
(1.泰州職業技術學院電子信息與工程系;2.泰州市心生軟件有限公司,江蘇 泰州 225300)
基于web的拼音首字母快速查詢的設計與實現
葉 鈺1,李太寧2
(1.泰州職業技術學院電子信息與工程系;2.泰州市心生軟件有限公司,江蘇 泰州 225300)
文章簡述了現有的操作系統和應用軟件對中文編碼支持的情況,對現有的常用拼音首字母快速查詢方案進行剖析。提出了新的解決思路,從理論、設計思路、具體操作等多方面對其進行深度講解,快速提高了通過拼音首字母快速查詢到漢字,為拼音首字母的快速查詢提供了一種較新的思想和一種可實施的方案。
拼音;通訊錄;中文編碼;數據庫
眾所周知,漢字是世界上編碼最復雜的語言,在Unicode5.0的99089個字符中,有71226個字符與漢字有關。而如何在這么多漢字中,用鍵盤上的二十六個英文字母就能快速定位到想要的各種漢字組合,是一項極其復雜的計算。通過開發科研項目《基于web的通訊錄管理系統》時就遇到了這一問題!經過課題組成員的反復思考、論證、總結,最后提出了該構想。
隨著經濟的發展與需要,漢字編碼標準也在不斷發展。按照發布時間,漢字編碼標準順序大致有GB2312、GBK、GB13000.1、GB18030-2000、GB18030-2005等。windows95中文版支持GB2312的七千多個漢字,從windows98到現在的windows7中文版才開始支持GBK。雖然2001年,Microsoft開發了Windows補丁,用于支持GB18030-2000標準,但是并沒有普及到所有Windows系統中,而對于2005年頒布的GB18030-2005標準,微軟到現在也沒使用在Windows桌面操作系統。對中文支持最好的Windows都如此,其他的諸如Linux等操作系統對中文的支持就更差了。
開發軟件中,對中文支持最好的應該算是Microsoft的.Net Framwork開發環境與Oracle的Java Runtime Environment,這兩種開發平臺都支持GBK以及Unicode4.0。但是目前要想支持GB18030-2000以上國內標準或Unicode4.0以上版本的國際標準,都還需要安裝補丁來實現。應用軟件中如瀏覽器,只有IE能夠較好的支持GBK標準內的所有漢字,其他瀏覽器諸如Firefox3、Chrome10等如今市場占有率排在前端的瀏覽器,都沒有很完整的支持GBK以及Unicode4標準內的所有漢字。由此可見,各種操作系統以及各種應用軟件,對中文編碼標準的支持并不重視。
綜上所述,現有的通過拼音首字母快速找到漢字的方法有的是基于操作系統,有的是基于開發環境,因此都會有一定的局限性。為解決這一問題,有些軟件考慮采用GBK標準為主,因為GBK標準終究是國標,它較多的考慮到了漢字與漢語拼音的對應關系,所有漢字編碼都采用拼音排序的方法,從“啊”字開始,以26個英文字母為順序依次將所有漢字進行編碼。這種方法的優點是代碼量少,運行所需資源也最少,缺點是遇到多音字的時候無法識別,也無法查找漢字的全拼。
以往的研究往往到此為止,開發人員都認為能夠將漢字轉換成標準的拼音,就已經能夠完美解決根據拼音快速查詢漢字的功能了。其實不然,談到查詢,關鍵在如何檢索;談到檢索,無法避免的要提到檢索效率:資源占用、速度、重碼率、以及代碼編寫的編碼量等。為避免這些問題,有些開發者在待檢索數據庫中增加一個列,用于存儲待檢索中文的首字母(如果一張表中有多個列都需要用拼音首字母檢索,那么就需要增加多個列)。這種方法的好處是,在實現具體功能的時候非常簡單,因為SQL語句對此有很好的支持。例如當用戶輸入zh,那么對應的SQL語句為:select realname from person where realname _py like'zh%';但這種方法不僅給數據庫增加了冗余,同時也不能很好的解決多音字的問題。因此急需要一個新的解決方案,在通過大量測試的情況下設計了如下的方案。
假定目標是用戶在瀏覽器的文本框中輸入聯系人的拼音首字母,要求從聯系人表person中將姓名realname首字母相同的查找出來給用戶選擇。現設計如下:
根據流程圖設計數據庫realname,其中包含三個表,存放漢字拼音編碼的編碼表的pinyin表、存放聯系人信息的person表、存放系統詞庫的pinyin_word表。這三張表的簡單結構如下:CREATETABLE`pinyin`(


其中pinyin表中存放的是GBK規范中的兩萬多個漢字與其拼音對照的數據,包括多音字在內。person表中存放的是聯系人信息。pinyin_word表中存放的是系統中需要根據拼音首字母查詢中文的所有中文與其拼音的對應表,起到詞庫的作用。大致實現過程為:每當用戶向系統中插入一條聯系人信息時,將其對應的拼音查找出來,并插入到pinyin_word表中。如果有多音字存在則生成多條記錄。當用戶根據拼音首字母查找時,首先到詞庫表中查找對應的中文,并將查找到的中文傳遞到用戶的聯系人表中查詢,如果存在,則顯示到WEB界面中供用戶選擇。考慮到效率,當重碼較多的時候,比如剛輸入第一個字母的時候,并不是將所有的結果都送到用戶的聯系人表中查找,只是將前n個結果送到聯系人表中查找,例如只選取前10個結果生成一條SQL語句:select realname from person where realname='張三'or realname='張四'or...不用擔心這種只選取n個結果的方法會影響到用戶體驗,因為當重碼太多的時候,用戶界面中并沒有足夠大的地方顯示,另外用戶也不會在幾十個候選項中敲擊幾十次鍵盤選中想要的選項。具體流程圖如下圖1。

新的解決方法與目前市場占有率比較高的搜狗、谷歌拼音輸入法所采用的原理相同。漢字的數量與中文詞語的數量雖然十分龐大,但是對于某個用戶來說,其常用到的字、詞數量是一個相對小的集合。當用戶在拼音輸入法中輸入過一次的詞,下一次就會自動顯示在候選項的前幾個,而可能用到的專業詞語則采用詞庫文件的形式存儲。詞庫文件可以放在服務器上,放在云上,這樣既能脫離操作系統和開發環境又能快速更新。通過總結與實驗,這種方法執行效率是最高的,可移植性是最好的,用戶的體驗是較完美的。該設想應用在《基于web的通訊錄管理系統》的項目中,經過測試,該方案完善的解決了可快速的通過拼音首字母查詢中文,為用戶提供了更加友好的界面,用戶反響良好。
[1]白中英.計算機組成原理[M].北京:科學出版社,2000.
[2]呂浩勇.VFP中漢字拼音首字母的獲取及應用[J].計算機與現代化,2005,(12):118-119.
[3]薩師煊,王珊.數據庫系統概論[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-),女,江蘇泰州人,講師,碩士,研究方向為軟件開發,服務器管理.
(責任編輯 施 翔)