国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現針對中文排序的方法

2020-02-16 01:30:39
字體:
來源:轉載
供稿:網友

本文實例講述了Python實現針對中文排序的方法。分享給大家供大家參考,具體如下:

Python比較字符串大小時,根據的是ord函數得到的編碼值。基于它的排序函數sort可以很容易為數字和英文字母排序,因為它們在編碼表中就是順序排列的。

>> print ','< '1'<'A'<'a'<'阿'True

但要很處理中文就沒那么容易了。中文通常有拼音和筆畫兩種排序方式,在最常用中文標準字符集GB2312中,3755個一級中文漢字是按照拼音序進行編碼的,而3008個二級漢字則是按部首筆畫排列,

>> print '曙'< '鮭','曾'<'怡'True True

出現這樣的結果是因為‘曙'和‘曾'都是常用字,而‘鮭'和‘怡'都是次常用字,但無論從筆畫還是拼音來看,這兩對順序都應該反過來。后來擴充的GBK和GB18030編碼為了向下兼容,都沒有更改之前的漢字順序,于是sort之后的次序就很亂了。

另一方面unicode編碼的中文是按《康熙字典》的偏旁部首和筆畫數來排列的,所以排序結果和GB編碼又不一樣。

# encoding=utf8char=['趙','錢','孫','李','佘']char.sort()for item in char:  print item.decode('utf-8').encode('gb2312')

輸出是:"佘孫李趙錢";而保存成gb2312編碼后

# encoding=gb2312char=['趙','錢','孫','李','佘']char.sort()for item in char:  print item

輸出是:“李錢孫趙佘”。顯然,這兩個結果都不是我們想要的。那我們究竟怎樣才能對中文正確排序呢?

先要弄清楚中文詞典的排序規則:先按拼音排列,區分四聲,拼音相同的就看筆畫數目多少,筆畫數也相同的再按筆順中的具體筆劃類型來區分,新華字典采用的順序是一丨丿丶乙,也稱作“天上人間”,應該沒有筆劃類型也完全一樣的。所以中文排序不僅需要帶音調的漢字拼音對照表,還需要有具體筆順的數據。

本以為有現成的模塊,試了幾個都不理想。pyzh的轉換代碼只支持不到7千字,而且還沒有音調。水木的roy的代碼涵蓋了2萬多字符,但需要pysqlite支持......還是自立更生吧~

我找到最全的數據是slowwind9999上傳到csdn的unicode漢字編碼表(點擊此處本站下載。),包括全部20902個漢字的全拼、五筆、鄭碼、UNICODE、GBK、筆畫數 部首,以及筆順編號(拼音部分沒有音調,而且個別注音有誤,如 囍,猤,啹等字,使用需注意。)我提取了其中的筆順數據,又用江志鍵的“實用漢字轉拼音”程序制作了unicode漢字音調版,其中中文漢字用四聲標注,319個日韓漢字沒有音調以示區別,并根據漢典的數據略作修正(但仍可能存在錯誤)。有了這兩個對照表,下面的工作就簡單了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善右旗| 广宁县| 土默特右旗| 遂溪县| 泰和县| 望城县| 社旗县| 澄城县| 松江区| 安丘市| 安图县| 惠东县| 万源市| 建瓯市| 呼玛县| 察雅县| 区。| 东海县| 卓资县| 柳州市| 盱眙县| 丹寨县| 临洮县| 乌兰察布市| 石家庄市| 丘北县| 永靖县| 南岸区| 武威市| 镇坪县| 蒙阴县| 万宁市| 宜都市| 浙江省| 肃北| 双流县| 香港| 太谷县| 莒南县| 丹凤县| 高雄县|