基于文本内容的垃圾短信识别实战

这篇具有很好参考价值的文章主要介绍了基于文本内容的垃圾短信识别实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、实战的背景与目标

背景:

垃圾短信形式日益多变,相关报告可以在下面网站查看

360互联网安全中心(http://zt.360.cn/report/)

目标:

基于短信文本内容,建立识别模型,准确地识别出垃圾短信,以解决垃圾短信过滤问题

2、总体流程

基于文本内容的垃圾短信识别实战,数据分析,python

 3、代码实现

1、数据探索

导入数据

#数据导入,设置第一行不为头标签并设置第一列数据为索引

message = pd.read_csv("./data/message80W1.csv",encoding="UTF-8",header=None,index_col=0)


更换列名

message.columns =["label","message"]

查看数据形状

message.shape


# (800000, 2)

整体查看数据

message.info()

"""
<class 'pandas.core.frame.DataFrame'>
Int64Index: 800000 entries, 1 to 800000
Data columns (total 2 columns):
 #   Column   Non-Null Count   Dtype 
---  ------   --------------   ----- 
 0   label    800000 non-null  int64 
 1   message  800000 non-null  object
dtypes: int64(1), object(1)
memory usage: 18.3+ MB
"""

查看数据是否有重复值(若有目前不清除,等抽样后,再处理样本数据)

message.duplicated().sum()


#13424

查看垃圾短信与非垃圾短信的占比

data_group = message.groupby("label").count().reset_index()


import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,8))

plt.rcParams["font.sans-serif"] = ["SimHei"]    # 设置中文字体为黑体
plt.rcParams["axes.unicode_minus"] = False      # 设置显示负号

plt.title("垃圾短信与非垃圾短信的占比饼图",fontsize=12)

plt.pie(data_group["message"],labels=["非垃圾短信","垃圾短信"],autopct="%0.2f%%",startangle=90,explode=[0,0.04])

plt.savefig("垃圾短信与非垃圾短信的占比饼图.jpg")

plt.show()

基于文本内容的垃圾短信识别实战,数据分析,python

 2、进行数据抽样

先抽取抽样操作 ,垃圾短信,非垃圾短信  各1000, 占比为   1:1

n = 1000

a = message[message["label"] == 0].sample(n)   #随机抽样

b = message[message["label"] == 1].sample(n)

data_new = pd.concat([a,b],axis=0)  #数据按行合并

3、进行数据预处理

数据清洗 去重  去除x序列 (这里的 x序列指  数据中已经用 XXX 隐藏的内容,例如手机号、名字,薪资等敏感数据)

#去重

data_dup = data_new["message"].drop_duplicates()


#去除x序列
import re

data_qumin = data_dup.apply(lambda x:re.sub("x","",x))

进行 jieba分词操作

import jieba


jieba.load_userdict("./data/newdic1.txt")  #向 jieba 模块中添加自定义词语

data_cut = data_qumin.apply(lambda x:jieba.lcut(x))  #进行分词操作


#设置停用词
stopWords = pd.read_csv('./data/stopword.txt', encoding='GB18030', sep='hahaha', header=None)   #设置分隔符为 不存在的内容,实现分割

stopWords = ['≮', '≯', '≠', '≮', ' ', '会', '月', '日', '–'] + list(stopWords.iloc[:, 0])


#去除停用词
data_after_stop = data_cut.apply(lambda x:[i for i in x if i not in stopWords])

#提取标签
labels = data_new.loc[data_after_stop.index,"label"]



#使用空格分割词语
adata = data_after_stop.apply(lambda x:" ".join(x))

将上述操作封装成函数


def data_process(file='./data/message80W1.csv'):
    data = pd.read_csv(file, header=None, index_col=0)
    data.columns = ['label', 'message']
    
    n = 10000

    a = data[data['label'] == 0].sample(n)
    b = data[data['label'] == 1].sample(n)
    data_new = pd.concat([a, b], axis=0)

    data_dup = data_new['message'].drop_duplicates()
    data_qumin = data_dup.apply(lambda x: re.sub('x', '', x))

    jieba.load_userdict('./data/newdic1.txt')
    data_cut = data_qumin.apply(lambda x: jieba.lcut(x))

    stopWords = pd.read_csv('./data/stopword.txt', encoding='GB18030', sep='hahaha', header=None)
    stopWords = ['≮', '≯', '≠', '≮', ' ', '会', '月', '日', '–'] + list(stopWords.iloc[:, 0])
    data_after_stop = data_cut.apply(lambda x: [i for i in x if i not in stopWords])
    labels = data_new.loc[data_after_stop.index, 'label']
    adata = data_after_stop.apply(lambda x: ' '.join(x))

    return adata, data_after_stop, labels

4、进行词云图绘制

调用函数,设置数据


adata,data_after_stop,labels = data_process()

非垃圾短信的词频统计

word_fre = {}
for i in data_after_stop[labels == 0]:
    for j in i:
        if j not in word_fre.keys():
            word_fre[j] = 1
        else:
            word_fre[j] += 1

绘图

            
from wordcloud import WordCloud
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(12,8))

plt.title("非垃圾短息词云图",fontsize=20)

mask = plt.imread('./data/duihuakuan.jpg')

wc = WordCloud(mask=mask, background_color='white', font_path=r'D:\2023暑假\基于文本内容的垃圾短信分类\基于文本内容的垃圾短信识别-数据&代码\data\simhei.ttf')

wc.fit_words(word_fre)



plt.imshow(wc)

基于文本内容的垃圾短信识别实战,数据分析,python

 垃圾短信词云图绘制(方法类似)

word_fre = {}
for i in data_after_stop[labels == 1]:
    for j in i:
        if j not in word_fre.keys():
            word_fre[j] = 1
        else:
            word_fre[j] += 1


from wordcloud import WordCloud
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(12,8))

plt.title("垃圾短息词云图",fontsize=20)

mask = plt.imread('./data/duihuakuan.jpg')

wc = WordCloud(mask=mask, background_color='white', font_path=r'D:\2023暑假\基于文本内容的垃圾短信分类\基于文本内容的垃圾短信识别-数据&代码\data\simhei.ttf')

wc.fit_words(word_fre)

plt.imshow(wc)

 基于文本内容的垃圾短信识别实战,数据分析,python

 5、模型的构建

采用   TF-IDF权重策略

权重策略文档中的高频词应具有表征此文档较高的权重,除非该词也是高文档频率词

TF:Term frequency即关键词词频,是指一篇文档中关键词出现的频率

                   N:单词在某文档中的频次 ,     M:该文档的单词数

IDF:Inverse document frequency指逆向文本频率,是用于衡量关键词权重的指数

       D:总文档数 ,     Dw:出现了该单词的文档数

调用 Sklearn库中相关模块解释

sklearn.feature_extraction.text  #文本特征提取模块

CosuntVectorizer           #转化词频向量函数

fit_transform()              #转化词频向量方法

get_feature_names()    #获取单词集合方法

toarray()                       #获取数值矩阵方法

TfidfTransformer          #转化tf-idf权重向量函数

fit_transform(counts)   #转成tf-idf权重向量方法




transformer = TfidfTransformer()      #转化tf-idf权重向量函数

vectorizer = CountVectorizer()        #转化词频向量函数

word_vec = vectorizer.fit_transform(corpus)     #转成词向量

words = vectorizer.get_feature_names()          #单词集合

word_cout = word_vec.toarray()                  #转成ndarray

tfidf = transformer.fit_transform(word_cout)    #转成tf-idf权重向量

tfidf_ma= tfidf.toarray()                       #转成ndarray

采用朴素贝叶斯算法

 多项式朴素贝叶斯——用于文本分类 构造方法:

sklearn.naive_bayes.MultinomialNB(alpha=1.0 #平滑参数, 
                                  fit_prior=True #学习类的先验概率  ,
                                  class_prior=None) #类的先验概率

模型代码实现文章来源地址https://www.toymoban.com/news/detail-576421.html

from sklearn.feature_extraction.text import CountVectorizer,TfidfTransformer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB


data_train,data_test,labels_train,labels_test = train_test_split(adata,labels,test_size=0.2)

countVectorizer = CountVectorizer()


data_train = countVectorizer.fit_transform(data_train)

X_train = TfidfTransformer().fit_transform(data_train.toarray()).toarray()


data_test = CountVectorizer(vocabulary=countVectorizer.vocabulary_).fit_transform(data_test)

X_test = TfidfTransformer().fit_transform(data_test.toarray()).toarray()


model = GaussianNB()


model.fit(X_train, labels_train)  #训练


model.score(X_test,labels_test)  #测试



#  0.9055374592833876

到了这里,关于基于文本内容的垃圾短信识别实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序安全系列——文本内容安全识别

    相信很多朋友跟我遇到过相同的问题,就是在开发一些笔记或者博客的时候,会遇到一些过滤敏感、时政、黄、赌、毒这类词汇、句子等这种棘手问题。 今天我们看一下微信小程序提供的文本安全内容识别,也可以减少一些我们的工作量。通过微信的接口来为我们过滤这些敏

    2024年02月09日
    浏览(45)
  • 【数据挖掘实战】——舆情分析:对微博文本进行情绪分类

    🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+   目录 一、背景介绍 二、比赛任务

    2024年02月08日
    浏览(41)
  • Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)

    运行有问题或需要源码请点赞关注收藏后评论区留言 在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。 首先要给

    2024年02月09日
    浏览(60)
  • flutter开发实战-TextPainter计算文本内容的宽度

    flutter开发实战-TextPainter计算文本内容的宽度 最近开发过程中根据Text文本的大小判断是否需要进行显示跑马灯效果,获取文本的大小,需要TextPainter来获取Size TextPainter主要用于实现文本的绘制。TextPainter类可以将TextSpan渲染到画布上 TextPainter可以将TextSpan树绘制到Canvas画布上。

    2024年02月13日
    浏览(31)
  • 基于单片机的语音识别智能垃圾桶垃圾分类的设计与实现

           功能介绍 以51单片机作为主控系统; 液晶显示当前信息和状态; 通过语音识别模块对当前垃圾种类进行语音识别;  通过蜂鸣器进行声光报警提醒垃圾桶已满; 采用舵机控制垃圾桶打开关闭; 超声波检测当前垃圾桶满溢程度; 整个电路以5v供电;  电路图   源代

    2024年02月13日
    浏览(39)
  • 毕业设计-基于深度学习的垃圾分类识别方法

    目录 前言 课题背景和意义 实现技术思路 一、目标检测算法对比研究 二、垃圾数据集的制作 实现效果图样例 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设

    2024年02月06日
    浏览(86)
  • Java实战:高效提取PDF文件指定坐标的文本内容

    临时接到一个紧急需要处理的事项。业务侧一个同事有几千个PDF文件需要整理:需要从文件中的指定位置获取对应的编号和地址。 要的急,工作量大。所以就问到技术部有没有好的解决方案。 问技术的话就只能写个demo跑下了。 PDF的文档看起来比较简单,因为只是需要读取两

    2024年02月13日
    浏览(57)
  • 毕业设计-基于计算机视觉的垃圾分类识别系统

    目录 前言 课题背景和意义 实现技术思路 一、单目标垃圾图像识别研究 二、多目标垃圾图像识别研究 三、垃圾分类检测系统应用程序设计 四、系统功能设计 实现效果图样例 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准

    2024年02月05日
    浏览(54)
  • 大数据分析案例-基于随机森林算法构建新闻文本分类模型

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集

    2024年02月02日
    浏览(54)
  • uni-sec-check内容安全unicloud公共模块,校验微信小程序文本内容安全识别和图片智能鉴黄,uniapp进阶

    uni-sec-check内容安全是unicloud封装了微信小程序的免费接口,文本内容安全识别(msgSecCheck)和音视频内容安全识别(mediaCheckAsync),如果我没选择使用uniapp+unicloud开发的话,可以轻松从插件市场引入uni-sec-check公共模块,完成内容安全检测,包含图片和文字检测,下面就针对文

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包