位置: 编程技术 - 正文

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 内置函数什么用来返回序列中的最大元素)

  • 财税2012年15号文件作废
  • 车船税发票可以作废吗
  • 一般纳税人每月开票不超10万
  • 海关进口发票可以退税吗
  • 户外公司招牌
  • 红冲后的发票税可以办退税吗
  • 房产税城镇土地使用税减免政策
  • 费用确认的时点
  • 辅导期一般纳税人管理办法
  • 建筑公司现金日记账怎么填写
  • 银行退回服务费怎么写分录
  • 注册资金没有到账用不用交印花税
  • 远期转账支票怎么取钱
  • 润滑油经销需要什么资质
  • 水电费没有票怎么做账
  • 外贸出口企业城市排名
  • 维修费增值税怎么开
  • 人工服务费发票
  • 企业购买商品
  • 小微企业销售已按固定资产入账的办公家具也享受免税政策吗?
  • 开个人发票需要身份证号码吗
  • 申报预缴企业所得税
  • 企业出售固定资产取得的净收益应列入的利润表项目是
  • 加工费计入应付账款可以吗
  • 电子税务局如何查询已开发票
  • 民办非企业捐赠支出会计处理
  • 企业的污水处理设备可以间断性运行么
  • 电脑美式键盘怎么设置
  • 不动产租赁如何缴纳增值税
  • 苹果电脑 浏览器
  • 资产证券化 会计处理
  • uniapp跨域解决方案
  • yolov5配置
  • 人工智能大模型上市公司
  • cmd 过滤命令
  • 营业收入和应收账款增长过快,而应
  • 桥闸通行费发票上注明的金额含税吗
  • 代扣代缴个人所得税账务处理
  • mac怎么下载postman
  • sqlserver数据类型转换函数
  • 无形资产收益额的具体测算方法有
  • 减免税额和抵免税额是什么意思
  • 什么情况下需要做肠胃镜
  • 独立核算的分公司可以享受六税两费减半吗
  • 异地成立分公司的流程和要求
  • 未开票收入如何计提增值税
  • 免费样品的好处
  • 股权转让,受让方的会计分录
  • 支付水电费会计等式
  • 河道维护中心
  • 哪些发票可以报销哪些发票不可以报销
  • 发票内容可以写工程款吗
  • 旅游团建费用会计怎么入账
  • 进项发票超过期限不认证怎么办
  • 技术服务发票怎么做成本
  • 生产成本和主营业务收入的关系
  • win10图片修改
  • ios自定义应用图标
  • win7无法访问局域网电脑
  • win8系统对电脑配置要求
  • ubuntu系统安装程序
  • win8.1怎么设置
  • 微软官方解决升级问题
  • xp系统升级成win7还会卡吗
  • nodejs入门教程
  • xml文件网络传输
  • cocos2dx onpause崩
  • webgl基础教程
  • shell命令行参数个数
  • 批量安装windows7补丁
  • Protecting Content With AssetBundle[Unity]
  • android开源项目在哪找
  • JS+CSS实现仿雅虎另类滑动门切换效果
  • js的设计模式有哪些
  • python list set dict tuple
  • 使用筷子就餐会不会传染乙肝病毒
  • android教学
  • 内蒙古国家税务
  • 手表关税多少
  • 税收优惠政策有什么公司受影响
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设