基于SVM的中文垃圾短信分类

摘 要

在人们的日常生活中,一个良好的沟通桥梁是人们交流间的重要纽带,而现在智能手机的普及使得短信发挥着越来越重要的作用。而短信的普及便利了我们生活的同时,良莠不齐的短信也一定程度上损害了人们的生活质量,例如普遍存在的广告、色情、诈骗、诅咒等垃圾短信。现阶段垃圾短信识别的研究十分必要,一种实用高效的短信分类方法能实现短信的过滤操作,使得人们在享受短信带来便利的同时,提高生活质量。
提取垃圾短信的敏感词是传统的短信过滤方法常采用的一种手段,但由于短信用语是人类的自然语言,敏感词这一特征实际提取的难度很大,且容易把正常的短信过滤掉。
为了优化传统短信过滤方法的缺点,本文提出了另一种解决方案,即基于SVM算法的监控和分类方案。本系统以Eclipse作为开发平台,使用Spring分层框架,数据库采用Mysql,服务器选用的是内置Tomcat。该方案的思路是基于短信内容、长度等特征,用空间向量表示短信文本,对垃圾的短信的判断和过滤。在准确度和效率方面,该解决方案均取得了大幅的提升。在服务端主要分为三个部分,主菜单、短信管理、用户管理。在用户登录或者注册之后,可以进入主菜单,在用户管理下,可查看用户昵称,用户编号,用户密码,可以并对某用户进行删除操作。在短信管理菜单下,可以查看短信昵称,用户,内容,分类,操作。其中操作即是删除功能。
本文详细介绍了系统的开发背景、需求分析、总体设计、数据库设计、详细设计、主要功能模块的开发与实现以及开发体会等内容,研究思路和设计思想对垃圾短信判、过滤、分类具有一定的参考价值。

关键字: 垃圾短信 判断过滤 空间向量 短信分类 特征提取

1 绪论

1.1 系统开发背景和意义

短消息服务是移动通信网络的基本服务,但短消息的普及率越来越高,垃圾短信也越来越多。手机上充斥着来自不同渠道的垃圾短信,给人们带来了极大的不便,造成十分不好的影响。所谓的移动垃圾短信是指未经用户请求或许可就直接发给用户接收到的无用信息。例如,没有许可的商业广告、诈骗、推销等一系列种类。垃圾短信的常见内容有广告信息、虚假获奖信息、欺诈信息等。国家相关部门根据对手机短信的调查,中国平均每周收到11.4条垃圾短信。中国有9000万手机用户,356万个手机用户,在庞大的基数下中国用户每天收到超过1.5亿条垃圾短信,这么多垃圾短信给社会带来了十分不好的影响。在中国,所有类型的网关和短消息中心都有垃圾短信短消息监控模块,这些模块受不同的用户需求和转发速度的影响,且这些模块通常设计得非常简单,所以未对这些垃圾短信起到决定性作用。
现有的垃圾短信短消息采用的方法一般是屏蔽号码。对于具有特定的手机号码的垃圾短信,通常可以手动追加黑名单。系统直接扫描用户的地址簿,指定黑名单号码,不管内容,直接全部屏蔽。
另一方面,在市场上流行的垃圾短信软件中,为了处理这些不熟悉的数字,很多人会用一些关键词阻断短信,但相对来说这比较简单,效果不好。而且,以关键字来判断是否为垃圾短信是不能百分百保证是准确的。例如,很多商业广告都有关键词“咨询”。如果简单地认为咨询这个词是垃圾短信,引起误判,导致错过一些信息。例如,在信中写道:“这个问题我需要咨询律师,之后给您答复。”因此,如果只使用上述简单的方法进行过滤,用户的通常短信就会被相当程度的阻挡,可能会给用户带来巨大的损失。
针对上述情况,本文所研究的就是关于这方面的技术,即中文短信垃圾短信分类系统,它是基于SVM的安卓平台嵌入应用,力求与现实相结合,解决人们日常生活中垃圾短信的困扰,让人们实现随时随地享受无垃圾短信的好处。本课题所用的仿真程序对发送到手机的垃圾短信信息进行一系列的处理,通过添加规则,结合短消息长度等信息,并且对预处理的短消息采用SVM算法进行系统的分类分类。通过实验的结果表明,该方法具有较好的精度,基本可以完成对我们日常生活中所接受的各种短信进行分类,过滤出困扰我们的垃圾短信,给我们的生活带来更多的方便。

1.2 国内外研究现状

根据我国工信部最新公布的数据显示,我国当前移动电话用户净增2.7亿户,全国移动电话总数达到了接近10亿户,全国移动电话普及率也达到了85%以上。短信业务在我国推广后,根据国家信息产业发布的统计数据显示,我国每年的短信数量达到了2.5万亿条,由此可见,短信的发展是如此的迅速。这也让不法分子瞅准了机会,想要通过短信的方式来谋利以达到某种目的。
在垃圾短信的治理方面,每年接到举报的短信不计其数,在这些被举报的短信中,违法出售票据的所占比例最大,其次是非法金融活动和各种网址,还有部分非法经营活动出售违禁品等等。被举报的涉嫌违法和不良短信发送源的情况来看,其中举报中通过手机SIM卡(点对点)的发送比例最大,部分则是通过端口发送的根据所获得的数据表明,推销等类垃圾短信是最多的,违法等不良信息的主要内容则是中将,汇款为主的诈骗信息。
垃圾短信分类技术的发展现状
由于垃圾短信的无孔不入给我们带来了很多的麻烦,对我们正常的生活造成了十分不便的影响,因此,人们希望这些垃圾短信能够销声匿迹,所以采取了很多办法来过滤这些垃圾短信。现在大都采用SPAM领域的技术成果,如:黑白名单技术,身份认证,挑战-响应,发送频率监控,关键词过滤等。而垃圾短信过滤主要围绕着两种方式和两种途径来进行。
两种方式:
第一种是“基于来电号码”的黑白名单机制分类
第二种是“基于短信内容”的分类
两种途径:
第一种是“基于短信服务中心”分类
第二种是“基于手机客户端”分类
正是由于这些方法的出现,使我们对垃圾短信的过滤越来越强,越来越准确,使得我们能够远离垃圾短信的困扰。

1.3 课题研究内容

本系统采用Java编程,以Eclipse作为开发平台,使用Spring分层框架,数据库采用Mysql,服务器选用的是内置Tomcat。并且根据我国当前垃圾短信的分类方式和常用的分类技术,如:关键词,黑白名单,规则的垃圾短信分类技术,在此基础上引入了基于SVM的垃圾短信分类技术。

1.3.1 短信特征的提取

一般的文本分类把分词后的词作为特征项,我们考虑了短信内容的灵活多变,所以我们一般在方案中加入规则以及短信的长度作为特征项,这样能够大大提高准确度。
1)样本预处理及分词
过滤系统将以文本形式接受到的短信进行预处理,首先对短信中无意义的词进行筛选以及对各种标点的提出。之后在对分词字典进行分词,分词是将短信分成一个个有意义的单词。中文分词若有着其本身的复杂性,不如词性变化,一次多以等。其次对分词进行信息提取。然后将文本进行向量空间的模型表示,也就是把文本化为特征项的权重分量的向量表示。一般选取词作特征项,权重表示用词频度。
2)特征降维
预处理之后的短信会被分成很多的词语,当训练集使用的字典包含的词语数量很大时,其向量空间维数必定很大,所以需要对其进行降维。常用的降维特征选择方法有:文档频率(DF),互信息(MI),信息增益(IG),统计量(CHI)等。接下来所做系统在选择特征算法上采用信息增益[9]。
3)长度特征提取
短消息规范中规定,一条短信息的中文为70个汉字,一般垃圾短信发送者为了有效降低发送成本而尽量达到欺骗的目的,他们往往回把信息量控制在70子以内,使得单位成本的效益最大化。正常的短信长度大部分占30个子,所占比重为72.60%,而垃圾短信在这里面只占0.33%,且垃圾短信一般都在50字左右,所以我们也可以根据短信的长度作为短信特征值之一。
4)其他特征值提取
垃圾短信中往往会提到网址,电话号码以及与金钱有关的内容。我们也可以把这些信息提取出来,判断是否出现了网址信息,电话号码,金钱有关的内容等。网址信息中一般会出现http,www,com,等关键词,电话号码一般是有7到12位数字,而金钱有关的则会出现“账户”“汇款”“银行”“打到”等等关键词。我们可以根据这些关键词从而判断出哪些为垃圾和诈骗信息。

1.3.2 构造器分类

SVM是近几年机器学习,机器识别方面公认比较好的算法。这个算法在解决小样本,非线性以及高维模式识别中表现出了许多的优点,是基于统计学习理论的VC维理论和结构风险最小原理。
当问题并不是线性可分时,可以通过一个适当的非线性函数即核函数,将数据由 原始特征空间映射到一个新的特征空间中。
常用的核函数有:
(1)线性核函数
(2)多项式核函数
(3)径向基核函数
(4)二层神经网络核函数

2 系统的需求分析

2.1 系统可行性的需求

(1)经济可行性
系统的经济可行性是对系统建成后组织的经济组织能力、成本、运行、维护和社会经济效益的估算。
Android平台的开源性为该项目的开发提供了很大的便利,使得开发工作变得更加可行了。而系统搭载的服务器是Tomcat,Tomcat作为一款小型的服务器,同样是免费的,因此系统的开发对资金的要求不高。等到系统正式设计完成,投入到市场中进行使用时,为了节约成本,租用公网的服务器也是一个可行的选择,因此经过分析,系统在经济上具有很大的可行性。
(2)技术可行性
设计完成一个基于SVM的中文垃圾短信分类应用程序,对框架的深入了解是必不可少的一项重要工作,因此学习和研究的重心应该在 Android系统架构和Android应用程序框架上。应用程序的核心是系统的框 架,遵循程序员开发中涉及的规则和规则。此外,还需要对支持向量机算法有全面的了解。
我学习编程语言和其他一些有关软件设计和开发的课程(软件工程、数据库等)。我有能力设计和开发软件。我有一年的Java学习和Android相关的技术学习两年。通过分析,从技术的角度上进行分析,课题的研究具有可行性。
(3)操作可行性
该系统是基于Android移动操作系统的应用程序。直观易懂,清晰的操作可以直接由用户完成,测试模块,测试模块,综合测试和压力测试。可以方便地按照操作的方向操作系统进行操作。

2.2 SVM算法的分析与研究

支持向量机(support vector machines,SVM)是一种二类分类模型。
一个特征空间上的训练数据集如下:
T=(x1,y1),(x2,y2),…,(xN,yN)
其中,x1∈Rn, yi=1, i=1,2,3,…,N。其中xi是第i个特征分量,也称为实例。在xi类标记中,XI正负例称为正例或负例,样本点(XI,Yi)称为采样点,训练数据集假设为线性可分离的。学习的目标最重要的是找到一个超平面,该超平面是由特征空间分割的,超平面的作用是分类实例,并将其作为类。该分离的超平面的特点是与通常的向量方程w*x+b=0相对应,由法向量w和切片b确定,并用(w,b)表示。分离的超平面将特征空间分为两部分。法向量是指一个边的正类,另一个是负类。如图2.3所示:
在这里插入图片描述

图2.3 正负类线性图
一般来说,当训练数据集是线性可分的时,有一个无限孤立的超平面可以精确地分离两种类型的数据。感知器使用一种策略来最小化错误分类,以获得一个分离的超平面,但此时存在无限的解。线性分支支持向量机(LSVMS)利用区间最大化法寻找最优分离超平面,其解是唯一的。
在这里插入图片描述

图2.4 线性分类
线性分类支持向量机是解决线性分类问题的有效方法。然而,分类问题可能是非线性的。非线性支持向量机在该情况下就是一种合适的选择,而使用核技巧是非线性支持向量机的主要特点。

2.3 系统的开发平台

2.3.1 Android

1.Android系统的开放性
Android平台的开源决定了该平台的开放性很强,因此移动设备创新的步伐也相应的很快,而移动设备的创新带来的好处就是能给用户提供了高质量的移动服务。同时,对开发人员也大有裨益,开发人员在Android开源平台上的协作变得方便便捷,以确保新移动设备的研发速度。
Android系统功能
1)开放性
谷歌有一个开发联盟,共同合作研发安卓系统。通过运营商与设备制造商、开发商和其他利益相关者的深入合作,谷歌希望创建一个开发的手机业务。通过建立统一、开放的移动软件平台。
2)无边界应用
Android中的API是应用程序访问移动设备的方式,而应用程序通过网络可以使用其拥有的功能,在相同条件下可以创建应用程序,拨号屏幕等基本组件可以由移动设备的应用设备替换或者拓展。
3)应用程序可以很容易地嵌入到网络中
用户通过此应用程序,可以轻松的嵌入HTML、javascript和样式表,以及Web。可以通过Web显示运行并行应用程序,Android是运行环境呈现多任务并行的特点,应用程序运行在系统的后台,有情况时可以生成通知告知用户,引起用户的注意。
2.Android系统的体系结构
Android平台是基于Linux操作系统开发完成的,Android主要由操作系统、中间件、用户界面和应用软件四层组成。软件栈结构将彼此的层和层间劳动分开。这种分工确实是各层之间的低耦合。当变化发生在较低水平时,不需要完全更改层次较高的应用层。
下图2.1是Android系统的体系结构图。
在这里插入图片描述

图 2.1 Android系统框架图
从图2.1我们可以直观的得 出结论,Android系统分为五个部分。
(1)应用层(应用程序)
安卓系统包括一套基本的应用程序,如短信、地图、图表、联系人、浏览器等。而应用程序是基于Java代码完成的。
(2)应用框架(应用框架)
应用程序的基本框架的建立是开发Android应用程序时最重要的工作。基本框架的重要性在于一个合理框架的建立后,相关的应用程序完全被描绘出来了。Android开发者或普通用户都可以访问Android提供的API框架。
框架的重要性在于,它既是应用开发的基础,又是实现软件重用的重要方式和手段。功能模块只要在发布时与框架定义的规则相符,那么所有应用程序都可以发布和使用。
(3)函数库(LIBRARIES)
Android的体系结构中包含一套C/C++库。在通常的开发过程中,安卓的开发人员在开发应用程序的过程中不可以调用这个C/C++库。需要访问该库时需要通过应用框架来实现。
下面是一些Android的核心库。
1、系统C库:C标准库系统内置的Linux工具源于BSD系统。
2、Surface Manager:管理者对多个应用程序的子系统和二维和三维集成层的访问。
3、libwebcore:支持WebView和Android浏览器,其中WebView在应用程序的开发中,可以嵌入开发者的应用程序中。
4、SGL:一个基本的二维图形引擎。
5、3d库:OpenGL ES1.0API基于三维系统,这个3d库的作用通常是可以当做三维设备使用。
6、freetype:位图和矢量字体。
7、sqlite:一个适用性极强的轻量级关系型数据库,内置于Android 中,功能十分强大。
(4)android运行时(ANDROID RUNTIME)
Android在运行的过程中由核心库集和虚拟机两部分组成。其中核心库集囊括Java语言核心库的大部分使用场景,是Java的一个子集,而虚拟机则创建一个虚拟的运行环境,负责运行Android应用程序的执行工作。
(5)Linux内核(LINUX KERNEL)
Android基于Linux 2.6系统,Linux内核作为软硬件栈之间的抽象层,负责提供了一些基本的系统服务,如内存管理、进程管理、安全性、网络协议栈驱动模型等。
3、Android的基本组件
Android应用程序中组件的数量没有限制,即可包含一个组件,又可以包含多个组件。介绍Android应用程序中常用的重要组件。
(1)Activity
活动是与Android应用程序用户交互的组件。活动是每个应用程序所必须的组件。活动的主要作用是为用户提供虚拟的用户界面。默认情况下,每个活动以窗口格式显示用户界面。
(2)Service
服务表示单个Android组件处于平等的状态。判断有无图形用户界面是区别服务和服务元素之间最好的方法,其原因是因为服务通常运行在系统的后台,没有与用户交互的需求。通常服务组件是其他后台服务的集合,作用是监控组件,监测组件实现状态。
(3)ContentProvider
Android平台有一组sqlite数据存储机制,许多管理数据库的方法也定义在Android平台中。ContentProvider是应用程序访问数据库的方式。每个ContentProvider中,为了访问数据库,定义了相应的一组方法。还可以定义相应的ContentProvider,以便在应用程序构建新数据库时与其他程序共享数据。通常,应用程序访问ContentProvider中定义的函数不是直接调用的,而是通过ContentResolver的方式间接调用。这种通过ContentResolver间接调用的优点是可以统一接口。
(4)BroadcastReceiver
广播接收器也是Android应用程序不可获缺的一部分。广播接收器在Android中是用来接收广播的。从代码层面角度考虑,广播接收机与事件侦听器非常相似。与普通事件监听器不同,常规事件监听器是程序对象有效性的来源。同时,收听广播接收器和源代码的其他组成部分的事件源。
(5)Intent
Intent即”意向"。实际上,Intent并不是一个 Android应用程序组件,但它在Android应用程序的领域中,扮演着非常重要的角色。如果Android的运行时需要连接不同的组件。Intent是活动、服务和广播接收器之间通信的载体,但在不同组件中, Intent的使用机制存在差异性 [20]。
4、 Android平台的数据存储方式
数据存储是应用程序最基本的问题,也是企业开发中必须解决的问题。为了能够以多种方式存储应用程序并有效地使用数据进行更新操作,将数据存储起来的操作不可或缺。Android平台有五种数据存储方法:共享设置、文件、网络和sqlite。以下是这些保存方法的简要介绍。
(1) SharePreferences
sharereferences用于以“键值对”格式存储数据。该存储机制是一种轻量级键值的方式。它既可以存储基本数据类型,还能存储常用的ini文件格式。
(2) Files
Android可以通过存储设备创建数据文件,或者还能通过外部存储设备的形式创建。数据文件操作文件的方法主要有两个:分别是通过fileinputstream和fileoutputstream,通过两个方法的处理后,保存以文件形式存储文件所需的数据。如果需要这些数据,可以读取此文件以获取相应的数据。
(3) Network
网络的含义就是指在保持网络连接的前提下,通过访问互联网获取和存储一些数据资源。在网络上存储数据的方法有很多,例如上传以文件格式存储在服务器上所需的数据。通过网络连接,可以使用存储在相应资源中的数据从网络服务检索所需的数据。
(4) SQLite
Android应用程序需要随时存储、管理和升级大量数据、添加更新或者查看数据。Google为开发人员提供了sqlite数据库,内嵌于Android系统中,应对以上三种方法不能适用的情况。用于处理大量数据。使数据的存储、管理、维护等方面更加合理和强大。
sqlite数据库是一个开源的嵌入式数据库,用c语言编写,与市面上常见的关系型数据库一样(如MySQL、oracle等),具有ACID的特点、同样的有着sql的语法。不同的是,作为移动平台上的一款数据库,SQLite是轻量级的数据库,同时具备安全、独立、跨平台等特性。
5、开发环境搭建
JDK搭建流程
(1) JDK的安装
访问互联网,从网上下载JDK安装包,成功下载到计算机后运行,之后如没有特殊要求,将JDK安装在系统指定的默认路径内。
(2) Java环境变量的配置
JAVA_HOME、classpath、path这三个环境变量是JDK环境变量中必须配置的。
右键单击计算机–属性–高级系统设置–高级–环境变量。

右键选择新建,在相应的位置填写JAVA_HOME、classpath、path的值。
JAVA_HOME:jdk的安装路径
path:在尾部上加上字段%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;
classpath:设为;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar。
(3) 验证JDK安装是否成功
因为系统是Windows系统,所以需要打开DOS命令窗口,输入“java”、“javac”,若输出版本信息,则说明JDK安装成功。
(4) Android SDK安装
访问Android官网(https://developer.android.google.cn/index.html),选择对应计算机系统的SDK,并下载安装。

(5) 配置环境变量
之间已经配置过JDK的环境变量,现在只需在path环境变量中添加Android SDK目录下的tools子目录、platform-tools子目录。
(6) 下载eclipse
关于项目的开发调试工具,在此我们选择的是eclipse。首先进入下载官网http://www.eclipse.org,在对于的版本中选择Eclipse IDE for Java Developers,并下载其中的Windows版本压缩包。下载到计算机中后解压,eclipse免安装,只需执行eclipse.exe便能成功运行。
(7) 安装ADT插件
在Android官网(https://developer.android.google.cn/),找到相应位置,完成ADT插件的下载,下载完成后点击eclipse中的Help–Install New Software菜单项。
单击Eclipse中Windows–Preferences菜单项,在Eclipse中设置Android SDK路径。
这步操作执行完成后,Android的开发环境搭建完成,要想开发一个完整的项目,还需要进行Tomcat服务器的安装和搭建。

搭建tomcat服务器
(1) 下载tomcat压缩包
进入Tomcat官网http://tomcat.apache.org/,下载对应版本的压缩包,此处选择tomcat9.0.x,下载完成后解压。
(2) 运行tomcat服务器
在解压目录下,找到bin目录,在子目录下双击startup.bat,待服务器正常启动后,不要关闭DOS命令窗口,在浏览器的地址栏输入http://localhost:8080,若链接到Tomcat主页,表示配置成功。
(3) 服务器端配置
至此,开发项目所需的JDK、AndroidSDK及相关的服务器已经搭建完毕。下面的一步是最为重要的编码实现。

2.3.2 Eclipse
  1. JSP
    web开发设计到的JSP技术实际上是Java的servlet,在servlet中我们可以使用Java的API,在编写JSP界面能享受到 Java跨平台的特性带来的便利,一个体现就是我们可以把JSP应用在许多主流操作系统中,如Windows、Linux、Mac和Solaris 。JSP还具备以下特性,例如业务代码分离,组建重用,同时具备Java servlet功能和预编译功能,同时业务代码是分离的,所以静态界面可以使用框架或者是HTML进行构建,然后使用JSP完成动态部分,可以使用servlet、struts、springmvc控制业务层。编译过程是首先是把JAP文件转换为servlet,如果转换成功就可以把相应的java文件编译成相应的class。
    2.JDBC
    JDBC是由java编写的类及接口组成的集合,提供了一组用于实现对数据库访问的JDBC API,例如,连接到本课题的ssms数据库(Connection)、建立操作指令(Statement)、执行查询指令(executeQuery)、获得查询结果(ResultSet)等,利用JDBC可以将JAVA代码连接到数据库,与数据库连接后,可以直接添加、修改、删除数据库中的相应数据。

3 系统总体设计

3.1 系统总体设计

产品是否成功,主要是看用户们是否愿意使用。这需要满足功能设计的基础上,符合额外的用户要求。即垃圾短信分类应用的设计,必须用最安全的分类功能和最简单的操作来提供产品的可用性。另外,一个好的应用产品还应该设计一些附加功能,以显示垃圾短信的分类特性,如用户界面:在收到垃圾短信后,一些动画为了提高友好性使用用户界面进行分类等。
为了实现提供最完整功能的用户的最完整的功能和产品,该系统设计的目标在于区别设计的垃圾短信短消息分类。同时,保证用户友好的操作接口,满足用户经验的用户需求,同时提供系统操作的简单性。
项目系统的需求可以从不同的角度来描述,从项目的目标出发,对于系统的功能,主要从短信分类基本控制需要进行分析。如图4.1所示。
在这里插入图片描述

图4.1 系统管理图

中文垃圾短信分类的基本控制有如下两个部分,第一是查看短信:用户可以打开选中的短信单击“信息”按钮,打开选中短信;第二个是查看短信分类:用户收到短信,单击右下角的“刷新”按钮,显示出当前的短信的类别。

3.2 数据库总体设计

1、 数据库构建原则
设计良好的数据库可以使系统实现非常简单。同时,可以提高系统的执行速度。另一方面,设计混乱的数据库不仅增加了系统的复杂性,而且降低了系统的执行效率。因此,数据库的设计是一个非常重要的步骤。在完成系统的E-R图之后,有必要将E-R模型转换为关系模型。在此选择关系数据库。关系数据库表可以清楚地描述数据之间的关系。
数据结构组织和数据库文件设计是根据不同的应用、使用要求等来确定数据的总体组织和一系列其他问题[14]。
数据库名称是一个位于计算机存储设备上的仓库,用于存储数据。数据以某种格式存储。数据库中的数据可以由特定范围内的各种用户组织、描述、存储和共享,特定的数据模型具有较少的重复性、较高的数据独立性和可伸缩性。在开发包含数据库的软件时,需要根据需要解决的问题的本质和规模选择合适的数据库类型,并需要前端程序的编制工具[15]。
2、 数据库存储
本文介绍了一种连接Android数据库的方法。Android有自己的sqlite数据库。是一个适用于Android移动平台上的轻量级数据库。
Android数据库存储的位置位于data/data//database/目录中。Android使用ContentProvider作为内容提供程序,而sqliteOpenHelper数据库有助于创建类和操作数据库。数据库由上下文直接操作。getContentResolver()方法。dbhelper扩展的sqliteonhelper是程序的数据库类,提供了扩展的contentprovider。
Android有着标准的方法来新建一个数据库。如果继承sqliteOpenHelper类,实现了父类的oncreate()和onupgrade()方法,则可以轻松升级数据库版本。Android主要通过删除、更新和插入查询来处理数据库。要对相应的表进行操作,必须为任何操作指定一个URI。程序使用光标表指向数据表项,查询数据并将其显示在日志中[15]。

3.3短信特征提取

将分词后的词作为特征项是一般的文本分类中常常采用的方法,但是短信与一般文本分类不同,我们需要考虑短信用语的灵活性,因此我们在一般方案的基础上做出了改进,加入了恰当的规则,并且将短信长度指标一起作为了特征项,采取这样的改进后,能够极大的提高准确度。
在国内市场的使用环境中,中文短信是短信的主要组成部分,因此我们的使用的短信样本集合也是中文短信。

3.3.1 样本预处理及分词

预处理操作是指将短信经过过滤系统得到的文本进行初步的处理,首先剔除短信中无意义的词,如“了,的,啊”以及各种标点。剔除完成后,对短信文本进行分词,即将文本分为一个个有意义的中文单词,中文单词有词性的变化,且会有一词多义的情况,复杂性很高。
其次,是信息的提取工作,如:
字符串http://www . baidu. com,可以抽象成网址信息;信息中的文本“钱汇到这个账户来”,*20元”,可以提取出钱的信息;“拨打125908061”.将其中连续出现的九位数“125908061",提取成电话号码。
接下来的操作是用空间向量模型表示文本,其基本思想是选取词作为特征项,用词频表示权重, 把文档简化为特征项的权重为分量的向量表示。如:(w,w.*w).其中为w为第i个特征向量的权重。
100万条短信数据,将其划分为80万的训练集以及20万的测试集。第一步操作是划分文本域和标签域,这一步的操作的对象是存储信息的TXT文档,操作完成后,将文本域作为content,标签域作为label,存储json格式的文件中。而对于测试集,只需提取出文本域,存储进json格式的文件中。

3.3.2 数据标准化

存储的词汇向量矩阵和相应的标签文件包括必要的训练集数据和测试集数据。因此,在模型培训之前必须对数据集进行划分。在这里,一些类型的随机分割是在数据被取出之后进行的。
从分段训练集和测试集中提取的数据通常是非常稀疏的向量形式。它以CSR稀疏矩阵的形式存储,是实际计算处理中高维向量的形式。因此,从节省时间、节省空间、减少数据噪声、提高分类精度等方面考虑,维度缩减是必不可少的。当数据稀疏时,PCA(主成分分析法),Random projections(稀疏随机投影)和Feature agglomeration(特征聚类)这是互联网上常见的一种降维方法。

3.3.3 特征降维

用于预处理的短消息分为多个字。当训练集中使用的词典包含大量单词时,向量空间维数必须很大,并且必须用特征维数来减小。减小特征维度有两种方法。新的低维空间是指特征选择只从原特征空间中选择重要特征,而不改变原特征空间的性质。
特征提取、海量存储和计算不适用于处理手机短信。为了减小维度,本文采用特征选择方法。通常情况下,一种通用的特征选择方法由文档频率(df)、信息增益(ig)、互信息(mi)、统计(chi)等组成。在实验中, 信息增益值从对语料库中出现的每个条目计算,并在此基础上,低于特定阈值的条目,应该从原始特征空间中删除,而最终保留高于特定阈值的条目。

3.3.4 特征提取

需要转换一些非规范数据,是在使用jieba对数据进行分词操作前的必要操作。如统一转换电话号码xxx,特殊字符&"】;筛选一些无意义的、反复出现的词汇,如‘的’等当用词。
输入:
encoding=utf-8
import jieba
seg_list = jieba.cut(“我来到浙江杭州”, cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut(“我来到浙江杭州”, cut_all=False)
print("Default Mode: " + "/ “.join(seg_list)) # 精确模式
seg_list = jieba.cut(“他来到了北京”) # 默认是精确模式
print(”, “.join(seg_list))
seg_list = jieba.cut_for_search(“小明本科毕业于北京大学”) # 搜索引擎模式
print(”, “.join(seg_list))
输出:
【全模式】: 我/ 来到/ 浙江/杭州
【精确模式】: 我/ 来到/ 浙江杭州
【新词识别】:他, 来到, 了, 北京,
【搜索引擎模式】:小明,本科,毕业,于,北京,大学,学校,搜索引擎模式构建词向量的模式是TF-IDF方式,参数不同,得到的特征矩阵的维度也是不同的,如TfidfVectorizer(min-df, max-df)中min−df和max−df得到的特征矩阵的维度不一样。词向量中的元素通过TF-IDF方式转换成了float型。还有,为了后续处理的方便便捷,即为了方便后续模型训练和验证,我们把整个训练集庞大的词向量,存储为csr型到mtx文件中的稀疏矩阵。
(1)长度特征提取
一般而言,根据短消息规范,一条中文短信最多有70个汉字,而为了尽量达到宣传或欺诈效果,垃圾短信发送者考虑到发送成本,将单位成本的效益最大化,一般会尽量使用完70个汉字。而正常短信的长度相对而言较短,一般都会在30汉字以内,数据显示,该比例达到了正常短信数量的72.60%,而这个比例体现在垃圾短信上的比例只有0.33%。相对的,60汉字以上的垃圾短信的比例是69.91%,而正常短信只有6.16%。因此根据统计数据,短信长度可以作为短信特征值。
(2)其他特征提取
网址,电话以及和金钱有关的信息往往不会在正常短信中,而往往会频繁地出现在垃圾短信中,我们可以将这些信息提取出作为判断的依据。网址信息的判断,主要通过http,www, com等关键词;电话信息的判断,主要根据预处理后短信中连续出现数字位数是否在7到12位之间;金钱信息的判断,主要通过一些常用的关键词,如如“打到”,“农行”,“账户”,“钱”等,在提取出关键词的基础上,引入加权机制,权值到达一定阈值,则可以断定出现了金钱信息。表1是信息特征的分布图,规则i表示短信的概率,对于垃圾短信,表中的表示是(Currbish|Ri),而正常短信出现的概率,表中的表示是(Cnormal Ri)。

3.4构造分类器

SVM在解决小样本、非线性及高维模式识别中表现出许多特有的优势。SVM基于统计学习理论的VC维理论和结构风险最小原理,成为了近些年机器学习、识别方面公认比较好的算法。
为了便于训练,调参,交叉验证以及在测试集上的评估,我们将scikit-learn中完备的关于SVM的算法封装成一个训练器类,根据核函数的差异性,可以将SVM分类。在本项目中,我们试验了四个核函数,即RBF核函数(rbf),线性核函数(linear), sigmoid核函数(sigmoid),多项式核函数(poly)。
采用默认的参数表示线性核函数。
多项式核函数有三个参数,多项式核函数的最高此项次数用-d来设置,-d的默认值是3。核函数中的gamma参数设置,也就是公式中的第一个r(gamma),用-g来设置,-g的默认值是1/k(k是类别数)。核函数中的coef0,即公式中的第二个r用-r来设置,其默认值是0。RBF核函数有一个参数,核函数中的gamma参数设置,即公式中的第一个r(gamma),用-g来设置,-g的默认值是1/k(k是类别数)。sigmoid核函数有两个参数,核函数中的gamma参数设置,即公式中的第一个r(gamma),用-g来设置,-g的默认值是1/k(k是类别数)。核函数中的coef0,即公式中的第二个r,用-r设置,其默认值是0。
实验结果与参数的取值相关,对于非线性核函数(rbf,poly,sigmoid),不同的参数取值结果都会不同,甚至会出现模型过拟合的实验结果。最优参数的自动搜索通过GridSearchCV方式来完成。
通过一个适当的非线性函数φ(核函数),将数据由原始特征空间映射到一个新的特征空间,当问题不是线性可分时,这种方法比较实用。。
常用的核函数有
(1)线性核函数K(x,y)=x●y;
(2)多项式核函数K(x,y)=[(x●y)+1]d;
(3)径向基函数K(x,y)= sexp(-|x- yl2/d2);(4)二层神经网络核函数K(x,y)=-tanh(a(x●y)+b)。RBF径向基内积函数,支持向量机的思想有三个,分别为:求最优的分类面以取得较好的推广能力,;为解决线性不可分的问题,提出软间隔的概念;为解决平面从非线性扩展到线性的问题,引入核函数。
SVM的学习过程如下:
Stepl:给定训练集S=(x, y)–,(&.y%),叉∈R", y,∈{-1+1}
Step2:假设空间H,从H中选择“最好”的h,这个h的期望风险有下列形式的界:
dm()- In(m)E(h)≤E. ,(h)+0(-- d_ )这个界至少以概率1成立。
Step3:最小化式右边两项,从而使结构风险最小化。

4 系统详细设计

本章从以下两个部分进行详细设计,分为两个小节,一个是服务器端功能设计,其中短信管理系统登录界面、功能栏设计、用户管理设计、短信管理设计。另一个是安卓端功能设计,包含登录、注册、查看短信分类,和分类提交的功能。

4.1 服务端功能设计

1.短信管理系统登陆界面
分别在主页面放置三个输入框,使用div进行布局。具体输入框设置和属性如下:
<input type=“text” class=“input” name=“name” id=“name" placeholder=“请输入用户名” />
<input type=“password” class=“input” name=“pwd” id=“pwd" placeholder=“请输入密码” />

输入用户名和密码后,可以登录短信管理系统,界面如图4.1所示。
在这里插入图片描述

图4.1 用户登录界面
2、用户管理设计
使用普通的 HTML 表格即可,功能栏包括可用户昵称,用户编号,用户密码,操作。可以对用户信息进行查看,并对某用户进行删除操作,具体界面如下图4.2。
在这里插入图片描述

图4.2 用户管理
3、左侧功能栏设计
左侧切换卡提示有菜单栏、用户管理、短信管理
<a href=“#">菜单栏
<a href=" b a s e u r l / u s e r . a c t i o n " t a r g e t = “ m a i n " > 用 户 管 理 < / a > < a h r e f = " {baseurl}/user.action" target=“main">用户管理</a> <a href=" baseurl/user.action"target=main"></a><ahref="{baseurl}/manager.action" target=“main">短信管理
4、短信管理
短信管理部分以表格形式呈现出以下几个部分:昵称,用户,内容,分类,操作。其中操作即是删除。
可以查看某昵称下的用户信息,以及短信的具体内容,同时也可以反馈到分类的类别信息。在短信管理中,可以对其进行删除操作。具体界面如下图4.3所示。
在这里插入图片描述

图 4.3 短信管理

4.2 安卓端功能设计

1.登录和注册
用户首次使用SVM垃圾中文短信分类APP时,需要进行登录注册操作。为了简化的用户的操作,设计了一个较为简约的界面,用户不需要键入繁琐的注册信息,只需填写一些必要的字段,如手机号、验证码、昵称等,只需简单的几步操作便能完成注册信息的填写,系统在接受用户的注册信息后,便将每个用户名自动生成一个Uid,将信息存储到数据库中,这样在用户进行登录操作时,后台接受用户的输入,并进行校验,如果用户名和密码与数据库中存储的相符合,便跳转到用户的主活动界面,否则,提示用户重新输入,具体界面如图4.4所示。
在这里插入图片描述
在这里插入图片描述

图4.4 登录注册界面
2.查看短信分类
正常收短信和消息分类之后,可以清晰观察到短信的分类情况,具体界面如图4.5所示。
在这里插入图片描述
在这里插入图片描述

图4.2 短信区分
3.分类提交
具体的类别是可选的,选择之后可以进行提交,主要分类情况有正常、垃圾、广告、涉政、暴恐、辱骂等。分类之后的情况可以直接反馈到短信后面,如图4.3 从从从c所示。
在这里插入图片描述
在这里插入图片描述

图4.3 短信具体分类

5 实验结果及分析

实验中使用的短消息集是所有中文的短消息。训练集共2612条短信,包含普通短信和垃圾短信,都是从真实的电话用户和互联网上收集的。随机选择500条垃圾短信和500条普通短消息作为训练集。其余的短消息用作测试集。选择不同的阈值以获得不同的阈值。表5.1中,Sn表示短消息的正常错误率,Sr表示垃圾短信的误判率,Sa表示总识别率。表5.2是根据表5.1添加各种规则的结果,表5.3是根据表5.2添加长度信息的结果。这里的单一特征值指的是选取词作为特征项。维数即是一个向量中分量的个数。预处理之后的短信会被分成很多的词语 ,当训 练集使用的字典包含词语数量很大时,这个时候,向量空间维数必定相当巨大 ,必须对其进行特征降维。加入规则即是对基于垃圾短信的概率进一步的识别。短消息规范指定短消息是70个汉字。垃圾短信发送者通常使用70个汉字来最大限度地提高单位成本效益,有效地发送短消息,并降低实现公开和欺诈效果的成本。因此,将短消息的长度也视为短消息特征值之一。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在添加规则和增加长度信息判断后,Sn(正常短信误判率)和Sr(垃圾短信误判率)均有显著降低,证明这些规则和长度是区别垃圾短信和正常短息必不可少得因素,再选取特征值时不可忽略。
同时我们采用传统方法(人工标注方法),提出垃圾短信中300个关键词,与我们系统采用的方案进行比较,结果如表5.4所示。在增加规则和增加长度信息判断后,Sn(常规短消息误判率)和Sr(垃圾短信短消息误判率)显著降低,这些规则和长度对于从常规短消息中识别垃圾短信短消息至关重要,是一个因素和特征值。
同时,利用传统方法提出了300个垃圾短信关键词,并与系统进行了比较。结果如表5.4所示。
在这里插入图片描述

可以看出,传统的关键字过滤Sr(垃圾短信误判率)比单一特征值过滤要低得多。但是,由于前者的特征选择是针对垃圾短信消息的,所以Sn(正常短信误判率)一般是基于正常短消息和高于后者的垃圾短信消息,从而使错误短消息的误报率高于后者Sr(垃圾短信误判率)。如上所述,由于短消息术语的灵活性,垃圾短信的功能往往不明确。在添加规则进行长度决策时,支持向量机过滤的总识别率一般高于常规关键字过滤的识别率,常规短消息的误判率远低于常规关键字过滤的误判率。
在实际选择维数时,我们还对系统的性能进行了分析,对各个维数所占内存的大小进行了比较,结果如表5.5所示。

在这里插入图片描述

随着维数的增加,SVM算法的训练时fqNeP>qNfq~N2:NDn,并且训练生成的模型。
综上所述,从总体准确度来说,维数选在665维比较好,Sn(正常短信误判率)为1.67%,Sr(垃圾短信误判率)为3.75%,总体准确度能达到97.2%,但所占内存较大为1.61MB,当维数选在300维时,Sn(正常短信误判率)为1.67%,Sr(垃圾短信误判率)为5.00%,总识别率达到96.76%,但所占内存仅为前者的1/3,所以综合考虑到处理速度,以及所占内存大小,在实际应用中,维数选在300维比较合适。

6 系统测试

6.1 系统测试的理论概念

6.1.1 系统测试的目的

软件测试实质上是软件的审查工作,主要审查系统的需求分析、设计规范、编码等问题,是软件运营之前,保证软件质量的关键性一步。软件测试的目的是保障软件的质量。软件测试的主要流程是在软件投入运行前,对设计规格说明、软件需求分析和编码进行进一步的确认工作。测试目的一般分为两种,其分类的依据是立场的不同,即开发人员的角度和用户的角度是不同的。对于开发者而言,测试更多的是一种验证工作,验证开发的软件是否符合预期,是否符合需求文档等,是不希望软件产品出现错误的,而一个设计良好的程序能树立用户对软件的信心。而站在用户的层面上,想法就与开发者大相径庭,用户不需要关心软件如何完成,反而希望软件测试暴露出软件的一些错误和缺陷,从而对软件有一个能否接受并使用的心理预期。软件测试一般需要在测试过程中根据资源、风险以及组件的协调问题进行评估,总结成功或者失败的经验,从而有助于更好的版本更新,提升用户体验。
在软件测试过程中,开发人员可以评估测试进度、资源、问题、风险和其他组件调整,并总结测试活动的成功经验和经验,同时为日后的版本跟新做好准备[16]。

6.1.2 系统测试的原则

俗话说:“没有规则不成方圆”,遵循特定的原则也应该是软件测试应该遵守的。通常在软件测试中,遵循以下原则。
1、软件开发人员的座右铭应该是"尽快、不断地测试软件"。
2、测试用例分为两个部分,包括测试输入数据和相应的预期输出结果。
3、程序员应该避免自己检查自己的程序。
4、测试用例设计时应该包含两个部分,即合理的输入条件和不合理的输入条件。
5、注意测试的集群行为。
6、按照测试计划严格执行。
7、必须彻底检查所有测试结果。
8、保管测试计划出错用例,为日后维护提供资料。

6.1.3 系统测试的方法

在不同的情况下,选择合适的软件测试方法,往往能够很好的提高效率,起到事半功倍的效果,现阶段随着软件开发的成熟和规范化,测试方法也出现了多元化的发展趋势,如常见的白盒测试、黑盒测试等,还有一些如单元测试,自动化测试, 集成测试,回归测试, 安全测试,压力测试,兼容性测试等也逐渐应用到软件测试当中。下面的说明均是一些较为常见的测试方法。
随着软件产业的不断成熟,软件测试技术的方法和手段也日新月异。一种或几种合适的软件测试方法,往往能起到事半功倍的效果。常见的测试方法包括: 黑盒测试、白盒测试、自动化测试、回归测试、单元测试、综合测试、安全性测试、压力测试、兼容性测试。从手机软件系统测试、跨事件测试、功能模块测试、应力测试等角度,可以分为电容性能测试、性能测试和用户手册测试。
1、白盒测试
白盒测试是属于结构和逻辑驱动测试方式的一种最为常见的测试。白盒测试将测试的软件视为一个打开的盒子。白盒测试无需测试软件产品的功能,而主要目的是测试软件产品的内部结构和处理过程。
换而言之,白盒测试是为了了解产品的内部工作过程的一种测试方法,而不仅仅关注结果。白盒测试的依据可以是规范测试产品的内部行为。即根据软件的内部结构来测试软件,无论其功能如何,程序中的所有路径是否按照预定要求都可以检测得到。验证软件是白盒测试的主要方法,如逻辑验证、子类测试等。常用的白盒测试工具有JTEST、VCMITH、JPrand、C++测试、代码向导、Logiscope。
2、黑箱测试
根据软件规范进行的测试是黑盒测试。黑盒测试不将软件的内部工作原理考虑在内。因此,软件对用户来说是黑匣子。
站在用户的角度上, 软件测试员通过测试软件通过各种程序的输入输出结果来发现缺陷,而软件测试方法是如何实现的,不是用户所关心的。
3、自动测试
自动测试的含义是测试过程中使用自动测试工具,通常不需要人工干预GUI、性能和其他测试以及功能测试。自动化脚本是自动测试的重要组成。在测试行业中,常用的测试工具有Autorunner和tar。
4、单元测试
单元测试,英语是最低测试单元测试。测试代码函数和块。一般来说,它是在测试人员而不是测试人员中完成的。因为需要更多的内部编程和编码知识。除非应用程序系统具有设计良好的体系结构,否则这项工作很难完成。
5、软件测试流程
白盒测试主要针对系统,用于测试其内部逻辑、代码正确性。系统设计手册和说明书是白盒测试的必要材料,通过白盒测试我们可以了解到系统的具体设计方法。系统各部分的代码检查是否有错误。然后系统运行,调试检测错误并更改它。
黑盒测试法相对而言不是很严格,其目的是测试系统的可用性。黑盒测试主要是测试产品的功能是否符合规范以及设计的预期。
通过系统测试可以测试系统的适用性和稳定性。测试系统的整体组成部分也可以通过系统测试来实现,系统测试是在实际软件的运行环境中,在进行一系列装配测试和确认测试后的结果。此外,通过使用错误的操作方法,操作错误的情况下,可以检测系统的稳定性。
系统的可用性测试需要邀请客户使用它来提高系统的可用性,并在使用过程中加以改进[18]。
6、测试内容及结果
(1) 功能及界面测试
1.页面布局的完整性,主要包括检查控件是否被覆盖、使用界面是否越过了边界等问题。
2.流畅性的测试,流畅性主要体现在页面之间的跳转和切换上。
3.正确性的测试,正确性主要体现在页面之间是否能够正常跳转。
(2) 检查页面的功能是否完整,主要包括:
1.获取本机短信列表功能
2.本机短信是否能打开
3.短信能够正确的实现分类

6.2 系统测试用例的设计

在这里插入图片描述

源码下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Αиcíеиτеǎг

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值