朴素贝叶斯算法算法、支持向量机算法等主流的垃圾邮件分类算法都依赖于特征向量的提取和数据集对模型的训练,其中特征向量的提取又依赖于对邮件正文的分词结果。如果垃圾邮件发送者在邮件中插入一些干扰符号,很容易影响分词的结果。例如,在“发票”中间插入“【”变成“发【票”将会使得jieba或者snownlp之类的分词工具无法正常分词,从而干扰最终的邮件分类效果。
一般来说,在一封正常邮件中,是不会出现太多类似于【、】、*、-、/这样的字符的。如果一封邮件中包含的类似字符数量超过一定的比例,我们可以直接认为是垃圾邮件,而不需要朴素贝叶斯算法或者支持向量机等复杂的算法,可以大幅度提高分类速度。
因此当电脑识别出很多上列符号时就会识别出是垃圾短信。
def check(text, rate=0.2):
characters = '【】*-/\\'
num = sum(map(
lambda ch:text.count(ch),
characters))
if num/len(text) > rate:
return '垃圾邮件'
return '正常邮件'
text = input()
print(check(text))
text: 要检查的文本。
rate: 允许的最大字符频率,默认值为 0.2(20%)。
characters 变量定义了一组特定字符,包括 【】*-/\\。
使用 sum 和 map 函数统计在 text 中每个特定字符出现的次数。
计算特定字符出现的总数与文本长度的比例,如果超过给定的 rate,则返回 '垃圾邮件',否则返回 '正常邮件'。

1706

被折叠的 条评论
为什么被折叠?



