使用Python检测符号及乱码字符
最近在進行關鍵詞的分析,中間涉及到對一些特殊的字符進行過濾的需求。包括帶符號的(有部分還是SQL注入),并且存在一部分亂碼的問題。梳理下來供后續使用。
檢測字符串是否包含特殊符號
方案一:通過字符匹配的方式進行判定
def if_contain_symbol(keyword):symbols = "~!@#$%^&*()_+-*/<>,.[]\/"for symbol in symbols:if symbol in keyword:return Trueelse:return False方案二:使用正則表達式判斷(經測試\W在包含中文的情況下可用)
import redef if_contain_symbol(keyword):if re.search(r"\W", keyword):return Trueelse:return False檢測字符串中是否有亂碼
人眼能識別的亂碼在程序看來并沒有想象中那么簡單。針對程序來說“涓囧厓錛屾厛锽勬崘鐚”本身也是正常的字符。下面分享下一些折中的方案:
方案一:對分詞后的分詞率進行統計
從概率層面,正常的文本分詞率(文本長度/分詞后個數)>2,而亂碼字符則接近1。
具體代碼如下:
存在的問題,如果字符串內存在英文,則此方法的可用性不高,特別是關鍵詞長度非常小的場景。
方案二:通過是否包含生僻字的方法進行判斷
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 Truereturn False總結
以上是生活随笔為你收集整理的使用Python检测符号及乱码字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fedora chm 文档 阅读
- 下一篇: Python爆破Zip密码