使用Python检测符号及乱码字符

使用Python检测符号及乱码字符最近在进行关键词的分析,中间涉及到对一些特殊的字符进行过滤的需求。包括带符号的(有部分还是SQL注入),并且存在一部分乱码的问题。梳理下来供后续使用。检测字符串是否包含特殊符号方案一:通过字符匹配的方式进行判定defif_contain_symbol(keyword):symbols=”~!@#$%^&*()_+-*/<>,.[]\/”forsymbolinsymbols:ifsymbolinkeyword:

大家好,又见面了,我是你们的朋友全栈君。

最近在进行关键词的分析,中间涉及到对一些特殊的字符进行过滤的需求。包括带符号的(有部分还是SQL注入),并且存在一部分乱码的问题。梳理下来供后续使用。

检测字符串是否包含特殊符号

方案一:通过字符匹配的方式进行判定

def if_contain_symbol(keyword):
    symbols = "~!@#$%^&*()_+-*/<>,.[]\/"
    for symbol in symbols:
        if symbol in keyword:
            return True
    else:
        return False

方案二:使用正则表达式判断(经测试\W在包含中文的情况下可用)

import re
  
def if_contain_symbol(keyword):
    if re.search(r"\W", keyword):
        return True
    else:
        return False

检测字符串中是否有乱码

人眼能识别的乱码在程序看来并没有想象中那么简单。针对程序来说“涓囧厓锛屾厛锽勬崘鐚”本身也是正常的字符。下面分享下一些折中的方案:

方案一:对分词后的分词率进行统计

从概率层面,正常的文本分词率(文本长度/分词后个数)>2,而乱码字符则接近1。
具体代码如下:

''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! '''
# -*- encoding:utf-8 -*-
import jieba 
 
def if_contain_chaos(keyword):
    str_len = len(keyword)
    seg_len = len(jieba.lcut(keyword))
 
    if str_len / seg_len < 2:
        return True
    else:
        return False

存在的问题,如果字符串内存在英文,则此方法的可用性不高,特别是关键词长度非常小的场景。

方案二:通过是否包含生僻字的方法进行判断

1980年的GB2312一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。这6763个汉字在Unicode中不是连续的,分布在CJK统一汉字字符区(0x4E00-0x9FA5)的20902个汉字中。

对于直接将生僻字定义为非GB2312内字符。由于GB2312的字符不是连续的,所以不能直接使用正则表达式的方式进行限定。而我们的方案是通过将字符串的unicode转化为GB2312来判断是否含有生僻字。即当转化发生异常即为包含生僻字。

def if_contain_chaos(keyword):
    try:
        keyword.encode("gb2312")
    except UnicodeEncodeError:
        return True
    return False
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136813.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 用bat批量重命名图片_快速批量修改图片名称

    用bat批量重命名图片_快速批量修改图片名称问题描述:业务中遇到需要批量修改大量图片的名字。如下图,需要修改为图片名字“u=”之后和“,”之前的那一串解决思路1:bat批处理,网上查找相关代码如下:1@echooff2SetL

    2022年8月5日
  • SGD随机梯度下降_随机梯度法

    SGD随机梯度下降_随机梯度法BGDvsSGDBGDvsSGD名词解释功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入BGDvsSGD…

    2022年9月10日
  • 摩托罗拉me525刷机包_ipad刷机怎么刷机教程

    摩托罗拉me525刷机包_ipad刷机怎么刷机教程您好,仔细看完以下内容哦,很简单的,一定要一步一步来,不要偷懒,谢谢。小白也会刷机的,刷机是另一种乐趣。请珍惜我的劳动成果哦,写教程不容易的呢,弄好了后请小声的说一下哦。(*^__^*)谢谢备份好您的资料,准备内存卡,读卡器,数据线,保证电量50以上请下载以下内容,电脑里安装豌豆荚http://www.wandoujia.com/或者91助手http://soft.s

    2022年10月22日
  • 遇到问题–k8s–pod的状态为evicted

    遇到问题–k8s–pod的状态为evicted转载请注明出处:遇到问题–k8s–pod的状态为evicted遇到问题使用kubectlgetpods发现很多pod的状态为evicted。原因eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。多见于资源不足时导致的驱赶。更多详情参考kubernetes的eviction机制解决方案排查资源和异常原因,防止新…

    2022年5月17日
  • 机器学习及深度学习基础—7.20课堂笔记

    机器学习及深度学习基础—7.20课堂笔记本文主要回忆上课所讲的一些关于机器学习与深度学习的基本概念,以此来达到强化记忆与深度理解的目的。

    2022年6月16日
  • jps命令详解_jps用什么文件打开

    jps命令详解_jps用什么文件打开jps命令详解

    2022年9月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号