我找到最全的資料是slowwind9999上傳到csdn的unicode漢字編碼表,包括全部20902個漢字的全拼、五筆、鄭碼、unicode、gbk、筆畫數 部首,以及筆順編號(拼音部分沒有音調,而且個別注音有誤,如 囍,猤,啹等字,使用需注意。)我提取了其中的筆順資料,又用江志鍵的「實用漢字轉拼音」程式製作了unicode漢字音調版,其中中文漢字用四聲標註,319個日韓漢字沒有音調以示區別,並根據漢典的資料略作修正(但仍可能存在錯誤)。有了這兩個對照表,下面的工作就簡單了。
# 建立拼音辭典
dic_py = dict()
f_py = open('py.txt','r')
content_py = f_py.read()
lines_py = content_py.split('\n')
n=len(lines_py)
for i in range(0,n-1):
word_py, mean_py = lines_py[i].split('\t', 1)
dic_py[word_py]=mean_py
f_py.close()
筆順字典的處理方法也完全相同,雖然文字有兩萬行,匯入還是很快的,0.5秒左右。如果把這兩個檔案合併起來統一處理,應該可以更快。
# 辭典查詢函式
def searchdict(dic,uchar):
if isinstance(uchar, str):
uchar = unicode(uchar,'utf-8')
if uchar >= u'\u4e00' and uchar < = u'\u9fa5':
value=dic.get(uchar.encode('utf-8'))
if value == none:
value = '*'
else:
value = uchar
return value
查詢中文,一律轉為utf8字串,漢字外的其他字元不做處理,原樣輸出。如果需要聲母,只輸出拼音的第乙個字元就是了。只要資料準確,比較起來就很輕鬆了。數字在字母之前,愛(ai4)便會比昂(ang2)靠前,而筆順值的位數代表了筆畫數,數值對應筆劃權重,直接比較數字大小就可以得到正確的順序。**如下:
#比較單個字元
def comp_char_py(a,b):
if a==b:
return -1
pya=searchdict(dic_py,a)
pyb=searchdict(dic_py,b)
if pya > pyb:
return 1
elif pya < pyb:
return 0
else:
bha=eval(searchdict(dic_bh,a))
bhb=eval(searchdict(dic_bh,b))
if bha > bhb:
return 1
elif bha < bhb:
return 0
else:
return 'are you kidding?'
#比較字串
def comp_char(a,b):
chara = a.decode('utf-8')
charb = b.decode('utf-8')
n=min(len(chara),len(charb))
i=0while i < n:
dd=comp_char_py(chara[i],charb[i])
if dd == -1:
i=i+1
if i==n:
dd=len(chara)>len(charb)
else:
break
return dd
# 排序函式
def cnsort(nline):
n = len(nline)
lines='\n'.join(nline)
for i in range(1, n): #插入法
tmp = nline[i]
j = i
while j > 0 and comp_char(nline[j-1],tmp):
nline[j] = nline[j-1]
j -= 1
nline[j] = tmp
return nline
現在我們就可以按照字典的規範給中文排序了。
char=['趙','錢','孫','李','佘']
char=cnsort(char)
for item in char:
print item.decode('utf-8').encode('gb2312')
這裡我沒有考慮多音字的情況。如果想讓程式自動識別,可以增加多音片語對照表,通過上下文來判斷。我不知道**有這樣的資料,反正對於多音字不太多的情形,手動調整也就夠了。
LocalDB資料庫修改排序規則,修復漢字變問號
vs2012,vs2013新增的輕量級資料庫localdb,有個這個,開發人員就不必再安裝龐大的sql server了,可以方便地測試執行小型專案 既然是輕量級資料庫,它拋棄了龐大的身軀,功能上當然也會受到侷限,其中之一就是它預設的排序規則,使用預設排序規則,從 前台新增的中文資料在資料庫中顯示亂碼...
LocalDB資料庫修改排序規則,修復漢字變問號
vs中新增的輕量級資料庫localdb,有個這個,開發人員就不必再安裝龐大的sql server了,可以方便地測試執行小型專案 既然是輕量級資料庫,它拋棄了龐大的身軀,功能上當然也會受到侷限,其中之一就是它預設的排序規則,使用預設排序規則,從 前台新增的中文資料在資料庫中顯示亂碼或者變問號 這個問題...
LocalDB資料庫修改排序規則,修復漢字變問號
vs2012,vs2013新增的輕量級資料庫localdb,有個這個,開發人員就不必再安裝龐大的sql server了,可以方便地測試執行小型專案 既然是輕量級資料庫,它拋棄了龐大的身軀,功能上當然也會受到侷限,其中之一就是它預設的排序規則,使用預設排序規則,從 前台新增的中文資料在資料庫中顯示亂碼...