邮件过滤及排序.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
邮件过滤及排序

构建一个判定邮件是否是垃圾邮件的系统,利用SpamAssassin的公开语料库,可以在http:///publiccorpus/免费下载。根据邮件内容提取相应的特征词,依据特征次将邮件标注为垃圾或非垃圾邮件,特征词的提取可以根据内容、收发邮件的联系人等,这里我们根据内容。在这过程中需要相应的文本处理包(tm)。我们根据条件概率(bayes)将上述提取的特征词转化为相应的概率,从而分类。在这个过程中我们会遇到关于特征词提取,概率计算的问题,模型训练和测试,在贝叶斯中先验概率的选取,先验概率的选取可以通过正则化进行,将结果可视化等加载相应的包和设置工作路径library(tm) ##文本处理library(ggplot2) ##作图下面有两套文件在相应的文件夹中,一套用来训练分类器,一套用来测试分类器,有三类邮件:易识别的正常邮件、不易识别的正常邮件、垃圾邮件。spam.path - file.path(D:/R,spam)spam2.path - file.path(D:/R,spam_2)easyham.path - file.path(D:/R,easy_ham)easyham2.path - file.path(D:/R,easy_ham_2)hardham.path - file.path(D:/R,hard_ham)hardham2.path - file.path(D:/R,hard_ham_2)设置好路径后,编写函数,构建邮件的特征词项类别知识库,打开每一个文件找到空行,将空行之后的文本返回为一个字符串向量。get.msg - function(path){con - file(path, open = rt, encoding = latin1)text - readLines(con) # The message always begins after the first full line breakmsg - text[] ## msg - text[seq(which(text == )[1] + 1, length(text), 1)] close(con)return(paste(msg, collapse = \n))}以垃圾邮件为例,先得到垃圾邮件的文件列表,在列表中剔除cmds的文件,它们是unix的基本命令表,然后用上述函数得到垃圾邮件的文本向量spam.docs - dir(spam.path) ##获得路劲下的文件名spam.docs - spam.docs[which(spam.docs != cmds)] ##得到垃圾邮件名称all.spam - sapply(spam.docs, function(p) get.msg(file.path(spam.path,p))) ##得到文本向量利用tm包的函数,将得到的文本向量转化为TDM矩阵(词项-----------文档矩阵)([i,j]表示词项i在文档j中出现的次数),得到下述函数,注意TermDocumentMatrix函数对变量的要求,注意下面参数控制的含义。get.tdm - function(doc.vec){control - list(stopwords = TRUE,removePunctuation = TRUE,removeNumbers = TRUE,minDocFreq = 2)doc.corpus - Corpus(VectorSource(doc.vec))doc.dtm - TermDocumentMatrix(doc.corpus, control)return(doc.dtm)}spam.tdm-get.tdm(all.spam) ####得到垃圾邮件的词项-----------文档矩阵str(spam.tdm)构造分类器数据矩阵,将上述的词项-----------文档矩阵构造成一个数据框来保存所有特征词在垃圾邮件中的条件概率,根据多少邮件包含这个特征词项来定义一封邮件是垃圾邮件的条件概率。spam.matrix - as.matrix(spam.tdm) ###标准化为矩阵形式head(spam.matrix)dim(spam.matrix)spam.matrix[2,c(2,2)]colnames(spam.matrix)spam.counts - rowSums(spam.matrix)###每个特征在所有文本中出现的次数spam.df - data.frame(cbind(names(spam.counts),as.numeric(spam.coun

文档评论(0)

yy556911 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档