本文由我司收集整编,推荐下载,如有疑问,请与我司联系
Python
中文排序(转载)
2012/02/02
3793
Python
比较字符串大小时,根据的是
ord
函数得到的编码
值。基于它的排序函数
sort
可以很容易为数字和英文字母排序,因为它们在编码表
中就是顺序排列的。
但要很处理中文就没那么容易了。中文通常有拼音和笔画两种排序方式,在最常
用中文标准字符集
GB2312
中,
3755
个一级中文汉字是按照拼音序进行编码的,而
3008
个二级汉字则是按部首笔画排列,
出现这样的结果是因为‘曙’和‘曾’都是常用字,而‘鲑’和‘怡’都是次
常用字,但无论从笔画还是拼音来看,这两对顺序都应该反过来。后来扩充的
GBK
和
GB18030
编码为了向下兼容,都没有更改之前的汉字顺序,于是
sort
之后的次序
就很乱了。另一方面
unicode
编码的中文是按《康熙字典》的偏旁部首和笔画数来
排列的,因此排序结果和
GB
编码又不一样。
12345 # encoding=utf8char=[‘
赵
’,’
钱
’,’
孙
’,’
李
’,’
佘
’]char.sort()for item in char: print
item.decode(‘utf-8’).encode(‘gb2312’)
12345
#
encoding=gb2312char=[‘
赵
’,’
钱
’,’
孙
’,’
李
’,’
佘
’]char.sort()for
item
in
char:
item
输出是:
“
李钱孙赵佘
”
。显然,这两个
结果都不是我们想要的。那我们究竟怎样才能对中文正确排序呢?
先要弄清楚中文词典的排序规则:先按拼音排列,区分四声,拼音相同的就看笔
画数目多少,笔画数也相同的再按笔顺中的具体笔划类型来区分,新华字典采用的
顺序是一丨丿丶乙,也称作
“
天上人间
”
,应该没有笔划类型也完全一样的。因此中
文排序不仅需要带音调的汉字拼音对照表,还需要有具体笔顺的数据。
本以为有现成的模块,试了几个都不理想。
pyzh
的转换代码只支持不到
7
千
字,而且还没有音调。水木的
roy
的代码涵盖了
2
万多字符,但需要
pysqlite
支
持
......
还是自立更生吧~
我找到最全的数据是
slowwind9999
上传到
csdn
的
unicode
汉字编码表,包括全
部
20902
个汉字的全拼、五笔、郑码、
UNICODE
、
GBK
、笔画数
部首,以及笔顺
编号(拼音部分没有音调,而且个别注音有误,如
囍,猤,啹等字,使用需注
5087

被折叠的 条评论
为什么被折叠?



