位置: 编程技术 - 正文

Python检测生僻字的实现方法(python文字检测)

编辑:rootadmin

推荐整理分享Python检测生僻字的实现方法(python文字检测),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python判断汉字个数,python文字检测,python检测字母,判断生僻字正则表达式,python错别字检测,python检测输入字符,python检测输入字符,python错别字检测,内容如对您有帮助,希望把文章链接给更多的朋友!

解决思路

首先想到的就是利用 python 的正则表达式来匹配非法字符,然后找出非法记录。然而理想总是丰满的,现实却是残酷的。在实现的过程中,才发现自己对于字符编码、以及 python 内部字符串表示的相关知识的缺乏。在这期间,踩过了不少坑,到最后虽然还有些模糊的地方,但总算有一个总体清晰的了解。在此记录下心得,避免以后在同一个地方跌倒。

以下的测试环境是 ArcGIS .3 自带的 python 2.7.8 环境,不保证其他 python 环境也适用。

python 正则表达式

python 中的正则功能由内嵌的 re 函数库提供,主要用到 3 个函数。re.compile() 提供可重用的正则表达式,match() 和 search() 函数返回匹配结果,两者之间的区别在于: match() 从指定位置开始匹配,search() 会从指定位置向后搜索直到找到匹配字符串。例如下面的代码中,match_result 从第一个字符 f 开始匹配,匹配失败返回空值;search_result 从 f 开始向后搜索,直到找到第一个匹配的字符 a, 然后通过 group() 函数输出匹配结果为字符 a。

以上的实现方式需要先编译一个 pattern,然后再进行匹配。实际上,我们可以直接利用 re.match(pattern, string) 函数来实现相同的功能。但是直接匹配的方式没有先编译再匹配的方式灵活,首先是正则表达式没办法重用,如果大量数据进行同一模式匹配,意味着每次都需要内部编译,造成性能损失;另外,re.match() 函数没有 pattern.match() 功能强大,后者可以指定从哪个位置开始匹配。

Python检测生僻字的实现方法(python文字检测)

编码问题

了解 python 正则的基本功能后,剩下的事情就是找到一个合适的正则表达式来匹配生僻字和非法字符。非法字符很简单,采用以下 pattern 就可以实现匹配:

然而对于生僻字的匹配,着实难倒了我。首先是对于生僻字的定义,什么样的字算生僻字?经过咨询项目经理,规定非 GB 的字符属于生僻字。接下来的问题是,如何匹配 GB 字符?

经过查询,GB 的范围是 [xA1-xF7][xA1-xFE] ,其中汉字区的范围是 [xB0-xF7][xA1-xFE] 。因此,添加生僻字匹配后的表达式为:

问题似乎是顺理得当地解决了,然而我还是 too simple too naive 。由于要判断的字符串都是从图层文件读取的,arcpy 贴心地将读取的字符编码为 unicode 格式。因此,我需要找出 GB 字符集在 unicode 中的编码范围。但现实是,GB 字符集在 unicode 中的分布并不是连续的,使用正则表示这个范围必定是非常复杂的。使用正则表达式匹配生僻字的构想,似乎陷入了死胡同。

解决方案

既然提供的字符串是 unicode 格式,那么我可不可以将其转换为 GB 再进行匹配呢?实际上是不行,因为 unicode 字符集要远大于 GB 字符集,因此 GB => unicode 总是可以实现的,而反过来 unicode => GB 不一定能成功。

这突然为我提供了另外一种思路,假设一个字符串的 unicode => GB 转换会失败,那么是不是恰恰说明了它不属于 GB 字符集?所以,我使用 unicode_string.encode('GB') 函数尝试转换字符串,捕获 UnicodeEncodeError 异常来识别生僻字。

最终的代码如下:

总结

标签: python文字检测

本文链接地址:https://www.jiuchutong.com/biancheng/383420.html 转载请保留说明!

上一篇:python 写入csv乱码问题解决方法(python向csv写入数据)

下一篇:Python 内置函数complex详解(python 内置函数什么用来返回序列中的最大元素)

  • 个税应纳税所得额是要上交的钱吗
  • 房屋买卖收税
  • 开票人和复核人收款人能是一个人吗
  • 税务局代个人开发票
  • 没有数字的公章有效吗三方协议盖的章没有数字
  • 折旧会影响利润表吗
  • 对公收到一分钱怎么做账
  • 出售无形资产计入资产处置损益
  • 费用分割单模板
  • 购买生产原料分录
  • 两免三减半的范围
  • 企业所得税营业税金及附加包括
  • 支付劳务派遣管理费现金流量表里放在哪里
  • 由受托方提供原料和主要材料,受托方给我们开什么发票
  • 公告费交了以后能否撤销
  • 存货和应付账款
  • 银行抵债资产怎么管理
  • 不开票收入需要什么票据吗
  • 幼儿园开学费发票内容
  • 公司职工买房有补贴吗
  • 税局代增值税专用发票 需要带什么
  • 软件企业超税负率怎么算
  • 成本费用怎么做分录
  • 红字冲回怎么做账
  • 企业债券收入要在所得税前扣除吗
  • 个税申报成功如何修改
  • 图书对方开具的证明
  • 转出未交增值税借方余额表示什么
  • 企业资产损失会计处理
  • 耕地建厂房补偿方法
  • 外贸出口企业的租金能退税吗
  • 公司面临清算,外包企业的员工怎么处理?
  • 租金怎么来计算个税
  • 管理费用和财务费用在资产负债表怎么填
  • win7不能进系统怎么办
  • biospwds最新版
  • Win10 Build 18363.1350/17763.1728累积更新补丁KB4598298正式推送
  • 个人所得税专项扣除子女教育标准
  • register.exe - register进程有什么用.是什么意思
  • 公司一直是亏损怎么赔偿
  • ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1
  • 售后回购怎么做账务处理
  • php如何实现登录和注册
  • 权益法下长期股权投资超额亏损
  • PHP new static 和 new self详解
  • 残疾人个税减免标准
  • 营业收入和营业外收入的区别
  • 预提跨年工资怎么处理
  • 新增四大行业营收排名
  • 研发费用的范围包括哪些
  • MySQL创建数据库语句
  • 开普票需要公对公吗
  • 个人所得税累计收入怎么算
  • 为什么合理损耗不计入成本
  • 与广告公司签个协议
  • 外部审计的构成
  • 税控系统全额抵扣增值税申报
  • 公司有美金账户如何做账
  • 存货过期报废进项税额怎么处理
  • 收到红字增值税发票哪里查
  • 几个比较重要的家风
  • 数据库中的冗余度是什么意思
  • linux 使用技巧
  • win10怎么预览文件
  • vi修改文件
  • 虚拟机打开提示物理内存不足
  • 微软为什么不自己做电脑
  • 盗版win7怎么升级
  • win8电脑卡怎么办简单步骤
  • win8系统怎么设置开机密码
  • vue拦截器的作用及使用
  • shell脚本编程工具
  • shell脚本判断两个数大小
  • python reducebykey
  • js表单事件有哪些
  • javascript基础笔记
  • javascript基础笔记
  • 济南个税起征点是多少2021
  • 土地储备中心出让公告
  • 南通五险一金最低比例
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设