首页 / 邮件 / 12.朴素贝叶斯-垃圾邮件分类
12.朴素贝叶斯-垃圾邮件分类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了12.朴素贝叶斯-垃圾邮件分类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2562字,纯文字阅读大概需要4分钟。
内容图文
![12.朴素贝叶斯-垃圾邮件分类](/upload/InfoBanner/zyjiaocheng/1058/09cdf1787af742cfa7f96ac8591356db.jpg)
1. 读邮件数据集文件,提取邮件本身与标签。
列表
numpy数组
代码以及部分结果截图如下:
2.邮件预处理
邮件分句
句子分词
大小写,标点符号,去掉过短的单词
词性还原:复数、时态、比较级
连接成字符串
2.1 传统方法来实现
2.2 nltk库的安装与使用
pip install nltk
import nltk
nltk.download() # sever地址改成 http://www.nltk.org/nltk_data/
或
https://github.com/nltk/nltk_data下载gh-pages分支,里面的Packages就是我们要的资源。
将Packages文件夹改名为nltk_data。
或
网盘链接:https://pan.baidu.com/s/1iJGCrz4fW3uYpuquB5jbew 提取码:o5ea
放在用户目录。
----------------------------------
安装完成,通过下述命令可查看nltk版本:
import nltk
print nltk.__doc__
2.1 nltk库 分词
nltk.sent_tokenize(text) #对文本按照句子进行分割
nltk.word_tokenize(sent) #对句子进行分词
2.2 punkt 停用词
from nltk.corpus import stopwords
stops=stopwords.words(‘english‘)
*如果提示需要下载punkt
nltk.download(‘punkt’)
或 下载punkt.zip
https://pan.baidu.com/s/1OwLB0O8fBWkdLx8VJ-9uNQ 密码:mema
复制到对应的失败的目录C:\Users\Administrator\AppData\Roaming\nltk_data\tokenizers并解压。
2.3 NLTK 词性标注
nltk.pos_tag(tokens)
2.4 Lemmatisation(词性还原)
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(‘leaves‘) #缺省名词
lemmatizer.lemmatize(‘best‘,pos=‘a‘)
lemmatizer.lemmatize(‘made‘,pos=‘v‘)
一般先要分词、词性标注,再按词性做词性还原。
2.5 编写预处理函数
def preprocessing(text):
sms_data.append(preprocessing(line[1])) #对每封邮件做预处理
3. 训练集与测试集
4. 词向量
5. 模型
import csv import nltk from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer # 还原词性def get_wordnet_pos(treebank_tag): if treebank_tag.startswith(‘J‘): # 形容词return nltk.corpus.wordnet.ADJ elif treebank_tag.startswith(‘V‘): # 动词return nltk.corpus.wordnet.VERB elif treebank_tag.startswith(‘N‘): # 名词return nltk.corpus.wordnet.NOUN elif treebank_tag.startswith(‘R‘): # 副词return nltk.corpus.wordnet.ADV else: return# 数据预处理def preprocessing(text): tokens = [word for sent in nltk.sent_tokenize(text) for word in nltk.word_tokenize(sent)] # 将所有单词形成列表 stops = stopwords.words(‘english‘) # 停用词 tokens_stop = [token for token in tokens if token notin stops] # 去掉停用词 lemmatizer = WordNetLemmatizer() tag = nltk.pos_tag(tokens_stop) # 词性标注 newtokens = [] for i, token in enumerate(tokens_stop): if token: pos = get_wordnet_pos(tag[i][1]) if pos: word = lemmatizer.lemmatize(token, pos) newtokens.append(word) return newtokens file_path = r"G:\大三下\机器学习\SMSSpamCollection" sms = open(file_path, ‘r‘, encoding=‘utf-8‘) sms_data = [] sms_lable = [] csv_reader = csv.reader(sms, delimiter=‘\t‘) for r in csv_reader: sms_lable.append(r[0]) sms_data.append(preprocessing(r[1])) # 对每封邮件做预处理sms.close() print("邮件的标签为:\n", sms_lable) print("邮件的标签为:") for i in sms_data: print(i, end="\n")
输出结果部分截图如下:
原文:https://www.cnblogs.com/rushB/p/12896793.html
内容总结
以上是互联网集市为您收集整理的12.朴素贝叶斯-垃圾邮件分类全部内容,希望文章能够帮你解决12.朴素贝叶斯-垃圾邮件分类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。