python中文姓名排序_Python实现针对中文排序的方法

本文实例讲述了Python实现针对中文排序的方法。分享给大家供大家参考,具体如下:

Python比较字符串大小时,根据的是ord函数得到的编码值。基于它的排序函数sort可以很容易为数字和英文字母排序,因为它们在编码表中就是顺序排列的。

但要很处理中文就没那么容易了。中文通常有拼音和笔画两种排序方式,在最常用中文标准字符集GB2312中,3755个一级中文汉字是按照拼音序进行编码的,而3008个二级汉字则是按部首笔画排列,

出现这样的结果是因为‘曙'和‘曾'都是常用字,而‘鲑'和‘怡'都是次常用字,但无论从笔画还是拼音来看,这两对顺序都应该反过来。后来扩充的GBK和GB18030编码为了向下兼容,都没有更改之前的汉字顺序,于是sort之后的次序就很乱了。

另一方面unicode编码的中文是按《康熙字典》的偏旁部首和笔画数来排列的,所以排序结果和GB编码又不一样。

输出是:"佘孙李赵钱";而保存成gb2312编码后

输出是:“李钱孙赵佘”。显然,这两个结果都不是我们想要的。那我们究竟怎样才能对中文正确排序呢?

先要弄清楚中文词典的排序规则:先按拼音排列,区分四声,拼音相同的就看笔画数目多少,笔画数也相同的再按笔顺中的具体笔划类型来区分,新华字典采用的顺序是一丨丿丶乙,也称作“天上人间”,应该没有笔划类型也完全一样的。所以中文排序不仅需要带音调的汉字拼音对照表,还需要有具体笔顺的数据。

本以为有现成的模块,试了几个都不理想。pyzh的转换代码只支持不到7千字,而且还没有音调。水木的roy的代码涵盖了2万多字符,但需要pysqlite支持......还是自立更生吧~

我找到最全的数据是slowwind9999上传到csdn的unicode汉字编码表(点击此处本站下载。),包括全部20902个汉字的全拼、五笔、郑码、UNICODE、GBK、笔画数 部首,以及笔顺编号(拼音部分没有音调,而且个别注音有误,如 囍,猤,啹等字,使用需注意。)我提取了其中的笔顺数据,又用江志键的“实用汉字转拼音”程序制作了unicode汉字音调版,其中中文汉字用四声标注,319个日韩汉字没有音调以示区别,并根据汉典的数据略作修正(但仍可能存在错误)。有了这两个对照表,下面的工作就简单了。

笔顺字典的处理方法也完全相同,虽然文本有两万行,导入还是很快的,0.5秒左右。如果把这两个文件合并起来统一处理,应该可以更快。

查找中文,一律转为UTF8字符串,汉字外的其他字符不做处理,原样输出。如果需要声母,只输出拼音的第一个字符就是了。只要资料准确,比较起来就很轻松了。数字在字母之前,爱(ai4)便会比昂(ang2)靠前,而笔顺值的位数代表了笔画数,数值对应笔划权重,直接比较数字大小就可以得到正确的顺序。代码如下:

现在我们就可以按照字典的规范给中文排序了。

终于得到了“李钱佘孙赵”,示例文件点此下载。

这里我没有考虑多音字的情况。如果想让程序自动识别,可以增加多音词组对照表,通过上下文来判断。我不知道哪里有这样的数据,反正对于多音字不太多的情形,手动调整也就够了。

希望本文所述对大家Python程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站数据库中“密码加密”方法思考

博主,开始时候,写的web应用,数据库中的密码,都是直接保存的。真正的原汁原味,真正的所见即所得。 后来,看了别人的web应用都是MD5加密的,感觉很不错,自己也在应用中加入了MD5加密&am…

linux运维和3dmax哪个简单,牛逼运维常用的工具系列-2

劳动最光荣nmonnmon是linux性能监视和分析数据的工具,它的安装很简单,下载解压后,添加可执行权限,即可运行下载解压后,通过文件名可以发现,是多个发行版本的,根据自己的发行版本,然后…

全国计算机等级考试题库二级C操作题100套(第86套)

第86套: 甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次, 丙 每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参 提供的值,求出总共听到多少次鞭炮声作为函数值返回…

语义分割和实例分割_语义分割入门的一点总结

点击上方“CVer”,选择加"星标"或“置顶”重磅干货,第一时间送达作者:Yanpeng Sunhttps://zhuanlan.zhihu.com/p/74318967本文已由作者授权,未经允许,不得二次转载语义分割目的:给定一张图像&…

【转载】什么是C++虚函数、虚函数的作用和使用方法

我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。例如在例12.1(具体代码请…

linux 音频驱动的流程,Intel平台下Linux音频驱动流程分析

【软件框架】在对要做的事情一无所知的时候,从全局看看系统的拓扑图对我们认识新事物有很大的帮助。Audio 部分的驱动程序框架如下图所示:这幅图明显地分为 3 级。上方蓝色系的 ALSA Kernel 整体属于Linux Kernel,是原生Linux 操作系统的一部…

Windows Server 2008 R2Cisco2960 配置Radius服务 实现802.1x认证 实战

实战配置Windows Server 2008 R2 Radius服务 与Cisco 2960 实现 802.1x认证实验拓扑1.Radius服务器 安装 dc 域名 wjl.com ,和ca 安装步骤不再详解2.安装完ca之后,打开MMC 添加计算机证书,查看个人-证书里面有没有ca颁发给计算机的证书&…

python多线程下载器_用 python 实现一个多线程网页下载器

学习之#!/usr/bin/env python# -*- coding:utf-8 -*-import urllib, httplibimport threadimport timefrom Queue import Queue, Empty, FullHEADERS {"Content-type": "application/x-www-form-urlencoded",Accept-Language:zh-cn,User-Agent: Mozilla/4…

全国计算机等级考试题库二级C操作题100套(第87套)

第87套: 函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1,c2,c3返回主函数。例如:当n123114350时,结果应该为: c13 c21 c32。 请在程序的下划线处填入正确的内容并把…

Linux命令之ifconfig

ifconfig [interface] ifconfig interface [aftype] options | address… ifconfig是用来查看和配置网络接口的工具。Ifconfig配置的信息在网络设备重启后,配置就会还原。需要永久保存,请进入配置文件配置。 address可以是inet(TCP/IP&#x…

C#实现RTP数据包传输

闲暇时折腾IP网络视频监控系统,需要支持视频帧数据包在网络内的传输。未采用H.264或MPEG4等编码压缩方式,直接使用Bitmap图片。由于对帧的准确到达要求不好,所以采用UDP传输。如果发生网络丢包现象则直接将帧丢弃。为了记录数据包的传输顺序和…

linux文件编程(3)—— main函数传参、myCp(配置成环境变量)、修改配置文件、将整数和结构体数组写到文件

参考:linux文件编程(3)—— 文件编程的简单应用:myCp、修改配置文件 作者:丶PURSUING 发布时间: 2021-04-09 23:45:05 网址:https://blog.csdn.net/weixin_44742824/article/details/115209404 …

51芯片4*4列阵按键c语言程序,单片机城中社稷.doc

单片机城中社稷基于单片机的乳粉包装称重控制设计摘 要本论文在分析了国内外称重技术发展的基础上,着重对一个用于工业控制且功能较齐全的自动称重系统进行设计。随着自动化和管理现代化的进展,自动在线称重,快速动态称重在整个称重系统中有了…

linux 修改文件名_Linux常用命令

Linux下一切皆文件查看型ls 查看当前文件夹内容 选项 -a 查看隐藏文件 -l 查看文件详细信息pwd 查看当前所在路径su 切换用户cat /etc/passwd 查看当前系统的用户cat 文件 查看文件内容选项 -n 加上编号 -E 每行末尾加上$ifconfig 查看网卡名,IP地址等网络信息route…

Redis学习日记-05:SORT命令

目录 前言命令&选项SORT(默认根据元素由小到大):DESC(逆序):ALPHA(非数字元素排序):BY(参考键):LIMIT(返回指定范围的结果)&#…

Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1

错误大致显示如下信息:04-14 07:39:18.325: E/AudioEffect(20584): set(): AudioFlinger could not create effect, status: -104-14 07:39:18.325: E/libOpenSLES(20584): Effect initCheck() returned -104-14 07:39:18.325: E/libOpenSLES(20584): Environmental…

c语言mfc弹出窗口函数,CMFCDesktopAlertWnd实现桌面弹出消息框

1.创建一个CMFCDesktopAlertWnd指针CMFCDesktopAlertWnd* pPopup new CMFCDesktopAlertWnd;2.设置参数pPopup->SetAnimationType((CMFCPopupMenu::ANIMATION_TYPE) 2);pPopup->SetAnimationSpeed(100);pPopup->SetTransparency((BYTE)128);pPopup->SetSmallCaptio…

linux文件编程(2)——系统文件描述符、动静态文件、块设备介绍

参考:linux文件编程(2)——文件操作原理简述之文件描述符、动静态文件、块设备 作者:丶PURSUING 发布时间: 2021-04-09 11:14:12 网址:https://blog.csdn.net/weixin_44742824/article/details/115209312 目…

wxpython入门_wxpython笔记:Wxpython入门

#!/usr/bin/env python静态文本、可控文本、对话框、GetApp()importwx,timeID_EXIT200ID_ABOUT201class Frame(wx.Frame): #2 wx.Frame子类def __init__(self,parent None,id -1,title wxPython!):wx.Frame.__init__(self,parent,id,title,size(500,500))self.setupStatusBar…

C#常用加密方式

一、AES加密算法AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 1…