原理:
1.使用足够多的垃圾邮件和非垃圾邮件的内容作为训练集
2.读取全部训练集
删除其中的干扰字符
【 】 ,* 。
进行分词
删除长度为 1 的单个字符
3.统计全部训练集中每个有效词汇的出现次数,截取出现次数最多的前 N 个
注:N 可以自己指定
4.根据每个经过第 2 步预处理后的垃圾邮件和非垃圾邮件内容生成特征向量
统计第 3 步中得到的 N 个词语分别在该邮件中的出现频率
每一个邮件对应一个特征向量,特征向量长度为 N
每个分量的值 表示对应的词语 在本邮件中出现的次数
[3,0,0,5] 第一个词语出现 3 次,第四个词出现了 5 次
5.根据第 4 步中得到的特征向量和已知邮件分类创建并训练朴素贝叶斯模型
注:明确哪些是垃圾邮件,哪些不是垃圾邮件
6.读取测试邮件,参考第 2 步,对邮件文本进行预处理,提取特征向量
7.使用第 5 步中训练好的模型,根据第 6 步提取的特征向量对邮件进行分类 程序要点:
1.使用 re 模块下的 sub 替换干扰的符号
from re import sub
2.使用 os 模块下的 listdir 列出所有的记事本文件 .txt
from os import listdir
3.使用 collections 模块下的 Counter 对邮件中字符出现的次数进行统计
from collections import Counter
4.使用 itertools 模块下的 chain 对邮件中字符出现的次数进行统计
from itertools import chain
5.使用 numpy 模块下的 array 将数据输入到模型中,使用数组
from numpy import array
6.使用 jieba 模块下的 cut 对内容进行分词
from jieba import cut
7.使用 sklearn.naive_bayes 模块下的 MultinomialNB 导入朴素贝叶斯
from sklearn.naive_bayes import MultinomialNB
8.删除字符串两边的空白字符(空格,制表符,换行符)
line = line.strip()
9.将其他字符替换为空白字符
line = sub(r'[.【】 0-9、-。,!~\*]','',line)
10.对文本进行分词
line = cut(line)
11.过滤长度为 1 的单个字
line = filter(lambda word:len(word) > 1,line)
filter 函数将大于 1 的保存下来
12.列表添加元素使用 extends
words.extends(line) 程序:
from re import sub
from os import listdir
from collections import Counter
from iteratools import chain
from numpy import cut
from sklearn.naive_bayes import MultinomialNB def getWordsFromFile(txtFile):
# 获取每一封邮件中的所有词语
words = []
# 将所有存储邮件文本内容的记事本文件都使用 UTF8 编码
with open(txtFile,encoding = "utf8") as fp:
for line in fp:
# 遍历每一行,删除两端的空白字符
line = line.strip()
# 过滤掉干扰字符
line = sub(r'[.【】 0-9、-。,!~\*]','',line)
# 对 line 进行分词
line = cut(line)
# 过滤长度为 1 的词
line = filter(lambda word:len(word) > 1 ,line)
# 将文本预处理得到的词语添加到 words 列表中
words.extend(line)
return words

2020-04-11

最新文章

  1. linux下Vim的使用
  2. 使用Struts框架,实现用户登陆功能
  3. Java递归算法——三角数字(消除递归)
  4. torrent
  5. MIMO下的MES均方误差详细推导过程
  6. 不用static,巧用对象.方法调用java中的函数
  7. df和du显示的磁盘空间使用情况不一致的原因及处理
  8. Oracle buffer cache与相关的latch等待事件
  9. Google机器学习教程心得(三) 好的feature
  10. pci 相关资料
  11. vue 解决无法设置滚动位置的问题
  12. MySQL系列详解一:MySQL&&多实例安装-技术流ken
  13. (转)Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践
  14. ISO七层模型详解
  15. jsTree使用
  16. 关于oracle函数listagg的使用说明
  17. LOJ.2721.[NOI2018]屠龙勇士(扩展CRT 扩展欧几里得)
  18. spring boot 整合 (全)
  19. Android Library项目发布到JCenter最简单的配置方法
  20. Datax3.0使用说明

热门文章

  1. pycham中报:ModuleNotFoundError: No module named 'pymysql'
  2. python之os模块分类整理
  3. 如何配置-整合ssm框架之配置文件
  4. css怎么样设置透明度?
  5. Windows下的Linux系统
  6. Dot Net Core中间件内部运行机制
  7. mysql自连接和外连接知识点及相关案例
  8. 攻防世界FlatScience
  9. TB6560电机驱动器参数设置
  10. Python pip 国内镜像大全及使用办法