使用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SVR支持向量回归例子「建议收藏」

    SVR支持向量回归例子「建议收藏」SVR支持向量回归例子欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用M…

    2022年5月24日
  • java switch的意思_java switch

    java switch的意思_java switchjavaswitch[编辑]概述Java中的switch是“开关”的意思,有时也被划分为一种“选择语句”。根据一个整数表达式的值,switch语句可从一系列代码选出一段执行。一.Java的简介Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球…

    2022年7月26日
  • torch.nn.Conv1d及一维卷积详解[通俗易懂]

    近日在搞wavenet,期间遇到了一维卷积,在这里对一维卷积以及其pytorch中的API进行总结,方便下次使用之前对二维卷积是比较熟悉的,在初次接触一维卷积的时候,我以为是一个一维的卷积核在一条线上做卷积,但是这种理解是错的,一维卷积不代表卷积核只有一维,也不代表被卷积的feature也是一维。一维的意思是说卷积的方向是一维的。下边首先看一个简单的一维卷积的例子(batchsize是1,也只…

    2022年4月13日
  • Ubuntu 18.04 浏览器安装flash[通俗易懂]

    flash官网(注意下载和系统浏览器相对应的包)PPAPI:供Opera(15以上)、Chromium(开源谷歌)浏览器使用NPAPI:适用于FireFox(火狐)、Safari(苹果)、Opera(欧朋,12.17版以下)然后解压:tar-zxvfflash_player_npapi_linux.x86_64.tar.gz复制:sudocplibflashplay…

    2022年4月12日
  • spring中已经内置的几种事件

    spring中已经内置的几种事件

    2021年9月6日
  • BeanUtils.populate方法的作用

    BeanUtils.populate方法的作用一般来说,这个方法是在org.apache.commons.beanutils.BeanUtils包中的方法。该方法的函数原型为:BeanUtils.populate(Objectbean,Mapproperties)。这个方法会遍历map&lt;key,value&gt;中的key,如果bean中有这个属性,就把这个key对应的value值赋给bean的属性。具体使用方法,见…

    2022年7月26日

发表回复

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

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