陳令剛
摘要:漢字拼音的首字母,可以簡化商品的名稱、客戶單位的名稱的查詢,比如,在醫(yī)院管理信息系統(tǒng)中,輸入:“JN”就可以定位到“膠囊”。實現(xiàn)這一功能的關(guān)鍵在于提取出漢字的拼音首字母。但是當查詢的漢字為多音字時,往往會提取錯誤的漢字首字母,如”銀行”,容易提取的首字母為”YX”,實際應(yīng)為"YH"。針對這一問題,提出了建立多音字詞組與其首字母對照表的方法,首先判斷語句中是否含有多音字詞組,如果包含多音字詞組則從多音字詞組對照表中獲取對應(yīng)的漢字首字母。實驗結(jié)果表明,提出的建立多音字詞組與其首字母對照表的方法是可行的。
關(guān)鍵詞:漢字拼音;SQL Server;排序規(guī)則
中圖分類號:TP301 文獻標識碼:A 文章編號:1009-3044(2018)08-0005-02
1引言
在一些軟件系統(tǒng)中,常常需要快速定位特定的信息,比如醫(yī)院藥房管理系統(tǒng),工作人員查找藥品規(guī)范名稱,這時漢字錄人的效率就比較低,如果只錄入漢字拼音的首字母(漢字首拼),效率會有很大的提升,當要查找的漢字字數(shù)在4、5個以上時,漢字首拼的其重碼率是很低的。實現(xiàn)這一功能的關(guān)鍵在于,在數(shù)據(jù)庫的表結(jié)構(gòu)中增加一列字段作為對應(yīng)的漢字的拼音簡碼,這就需要提取出漢字的拼音首字母,獲取漢字的首拼音。最容易想到的便是建立一個碼表,也就是漢字與漢字首拼的對應(yīng)表,但是這種方法要將所有漢字的漢字和首拼存到數(shù)據(jù)庫,既費時又費力,且獲取漢字首字符的效率也比較低。為此參考文獻中提出了一種基于SQL Server排序規(guī)則的一種函數(shù),但是該函數(shù)沒有考慮到漢字多音字的情況。比如在獲取“銀行”的拼音首字母時,其函數(shù)實現(xiàn)的結(jié)果為“YX”,正確結(jié)果應(yīng)該為“YH”,于是本文提出了一種改進的獲取漢字首拼算法,使其能夠提取出正確的多音字首拼,實驗結(jié)果表明該方法是有效的。
2 SQL語言中的排序規(guī)則
排序規(guī)則是根據(jù)特定語言和區(qū)域設(shè)置標準指定對字符串數(shù)據(jù)進行排序和比較的規(guī)則。SQL查詢語言中,order by語句實現(xiàn)查詢結(jié)果的排序,其語法規(guī)則為:order by<排序列名>[ascIdesc]??鐜於啾磉B接查詢時,若兩數(shù)據(jù)庫默認字符集不同,系統(tǒng)就會返回這樣的錯誤:“無法解決equal to操作的排序規(guī)則沖突”。英文報錯為Cannot resolve collation conflict for equal to operation。這是由于默認字符集的不同導(dǎo)致SQL排序規(guī)則不同而引起的。SQL Server數(shù)據(jù)庫提供一整套windows和SQL server專用的排序規(guī)則,SOL語句在具有不同排序規(guī)則設(shè)置的不同數(shù)據(jù)庫上下文中運行時,其運行結(jié)果可能會不同。SQL Server排序規(guī)則由Windows區(qū)域設(shè)置(或者說字符集,如繁體和簡體)和Windows排序規(guī)則后綴組成。SQL Server數(shù)據(jù)庫支持的排序規(guī)則可以通過下面系統(tǒng)函數(shù)查看:
select*from::fn_helpcollations();
常用的漢字排序方式有:Chinese_Taiwan_Stroke_BIN、Chi-nese_Taiwan_Stroke_CI_AS、Chinese_PRC_BIN、Chinese_PRC_CI_AS。其中Chinese_PRC指中國大陸地區(qū)簡體字,Chi-nese_Taiwan指中國臺灣繁體字,Stroke是指按照筆畫順序進行排序,默認是按拼音排序,BIN指定使用向后兼容的二進制排序順序,CI表示不區(qū)分大小寫,AS表示區(qū)分重音。
3 SQL Server獲取多音字首拼原理
漢字的拼音首字符有23個,分別為:A、B、C、D、E、F、G、H、J、K、L、M、N、0、P、Q、R、S、T、W、X、Y、Z,代表23組漢語拼音音節(jié)。本文設(shè)計的函數(shù)依照Chinese_PRC_CI_AS_WS排序規(guī)則(大陸地區(qū)簡體字,不區(qū)分大小寫,區(qū)分重音,不區(qū)分全角半角),音節(jié)的排序順序為依次升序排列。拼音字母在漢語拼音表中的序號作為它們相互比較大小的依據(jù),如果兩個漢字的拼音相同則認為這兩個漢字大小相同。如“B”在漢語拼音表中排在“C”之前,則認為"B"小于"C"。如“曲(qu)”比“奇(qi)”大比“柔(mu)”小,則其首字符必然是“q”。但是這種方法沒有區(qū)分漢字為多音字的情況,當檢索語句中出現(xiàn)多音字時這用方法往往會提取出錯誤的首拼,比如“中國人民銀行”,這種方法獲取的首拼為"ZGRMYX"。通過分析發(fā)現(xiàn)多音字及其組成的詞組數(shù)量比較少,于是本文提出了一種改進的實現(xiàn)方式,首先建立一個多音字詞組與其正確的首字符的對照表,然后判斷檢查輸入的語句中是否含有多音字詞組,若檢測出多多音字詞組,則提取多音字詞組與其首拼對照表中的首拼作為結(jié)果,算法流程圖如下: