千家信息网

Python中怎么使用朴素贝叶斯进行垃圾短信识别

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"Python中怎么使用朴素贝叶斯进行垃圾短信识别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python中怎么使用朴素贝叶斯进行
千家信息网最后更新 2026年10月31日Python中怎么使用朴素贝叶斯进行垃圾短信识别

这篇文章主要讲解了"Python中怎么使用朴素贝叶斯进行垃圾短信识别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python中怎么使用朴素贝叶斯进行垃圾短信识别"吧!

一、引子

现在的很多手机管理软件都有垃圾短信拦截的功能,很智能很贴心是不是
嗯~ o( ̄▽ ̄)o
对于经常被垃圾短信骚扰的人来说,很是有用。(๑•̀ㅂ•́)و✧
但是很多的拦截软件在拦截到垃圾短信之后……又发个通知提示拦截到了垃圾短信╮(﹀_﹀)╭
好奇心害死猫,你告诉了我你拦截到了垃圾短信,我当然想知道你拦截的是什么垃圾短信了╮(╯_╰)╭

二、分类与垃圾短信识别

机器学习按性质来看,可以分为三大类:

  • 分类(监督)

  • 回归(监督)

  • 聚类(半监督)
    垃圾短信通常用已标记的短信数据,对未知的短信进行判断,其属于机器学习中的分类性质。
    在Python中有很多机器学习的模块,比如Sklearn、Tensorflow、Caffe等,可以很方便地调用一些机器学习的算法。

三、垃圾短信识别

嗯,直接上手干……( ̄_, ̄ )
80w训练数据集和20w测试数据集均来源于github上的一位小哥哥,在此谢过d=====( ̄▽ ̄*)b

1、数据处理

嗯,先看看数据长啥样:

import pandas as pddata = pd.read_csv(r"H:\RubbishMessage\data\80w.txt",encoding='utf-8',sep='    ',header=None)data.head()


最后一列为短信的内容,倒数第二列则是短信的类型,0表示正常短信,1表示垃圾短信。
然后,我们对短信内容按照不同的类型(正常短信和垃圾短信)进行分割和分词:

# 垃圾短信import jiebaspam = data[data[1] == 1]spam[2] = spam[2].map(lambda x:' '.join(jieba.cut(x)))spam.head()
# 正常短信
normal = data[data[1] == 0]normal[2] = normal[2].map(lambda x:' '.join(jieba.cut(x)))normal.head()


分别将不同类型分词后的短信保存为不同的文件:

spam.to_csv('soam.csv',encoding='utf-8',header=False,index=False,columns=[2])normal.to_csv('normal.csv',encoding='utf-8',header=False,index=False,columns=[2])
2、模型选择和训练

在此我们没有选择Sklearn或是其他的深度学习库,而是选用NLTK自然语言处理库来进行贝叶斯分类。
导入模块:

import nltk.classify.util
from nltk.classify import NaiveBayesClassifier
from nltk.corpus import PlaintextCorpusReaderimport random

加载刚刚导出的短信文件:

加载短信语料库message_corpus = PlaintextCorpusReader('./',['soam.csv','normal.csv'])all_message = message_corpus.words()

定义一个特征函数,用于生成特征:

def massage_feature(word,num_letter=1):    return {'feature':word[-num_letter:]}

对短信特征进行标记提取:

labels_name = ([(massage,'垃圾') for massage in message_corpus.words('soam.csv')]+[(massage,'正常') for massage in message_corpus.words('normal.csv')])random.seed(7)random.shuffle(labels_name)

训练并预测模型

from nltk.classify import accuracy as nltk_accuracyfeaturesets = [(massage_feature(n),massage) for (n,massage) in labels_name]train_set,test_set = featuresets[2000:],featuresets[:2000]classifier = NaiveBayesClassifier.train(train_set)

最后,咱们看看预测的准确率怎么样:

print('结果准确率:',str(100*nltk_accuracy(classifier,test_set))+str('%'))

感谢各位的阅读,以上就是"Python中怎么使用朴素贝叶斯进行垃圾短信识别"的内容了,经过本文的学习后,相信大家对Python中怎么使用朴素贝叶斯进行垃圾短信识别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

短信 垃圾 学习 贝叶 数据 朴素 内容 机器 分类 不同 特征 类型 监督 训练 准确率 性质 文件 标记 模块 模型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技保险 合肥互联网科技公司 云电互联网科技 互联网金融科技平台 互联网科技上市公司 伴你行互联网科技有限公司 互联网科技美容 佰商互联网科技有限公司 互联网科技有限公司 翻译 宁波青枫互联网科技有限公司 小米互联网科技园设置 华服互联网科技官网 全球顶尖互联网科技公司 重庆互联网医院沙龙医盟信息科技 高科技互联网发展前景如何 恒生互联网科技业指数调整周期 雨阳互联网卡科技有限公司 江苏互联网智能科技产品出厂价 版纳互联网科技选哪家 北京瑞云互联网科技有限公司 深圳市人人互联网科技有限公司 互联网科技有限公司图片 互联网科技社 北京禾田雨橡互联网科技 互联网大会黑科技排名 厦门比较好的科技互联网公司 互联网公司科技股 艺电能源互联网科技有限公司招聘 瑞安市蟠桃会互联网科技有限公司 互联网科技创业有什么好项目
0