python漢字排序規則 Python 中文排序

2021-10-11 10:15:01 字數 2406 閱讀 9228

我找到最全的資料是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了,可以方便地測試執行小型專案 既然是輕量級資料庫,它拋棄了龐大的身軀,功能上當然也會受到侷限,其中之一就是它預設的排序規則,使用預設排序規則,從 前台新增的中文資料在資料庫中顯示亂碼...