资源简介
python源码,用朴素贝叶斯算法实现垃圾邮件的过滤.

代码片段和文件信息
# -*- coding: utf-8 -*-
“““
Created on Thu Apr 11 00:02:15 2019
@author: 自律给我自由
“““
import xlrd
import re
import jieba
import math
import random
import numpy as np
import os
file=‘chinesespam.xlsx‘
wb=xlrd.open_workbook(filename=file)
ws=wb.sheet_by_name(‘chinesespam.‘)
dataset=[]
dataset1=[]
dataset2=[]
temp=[]
vocabList=[]
Percision = 0.0
Percision_All = 0.0
Recall = 0.0
Recall_All = 0.0
General = 0.0
General_All = 0.0
for i in range(1ws.nrows):
temp.append(ws.cell(i0).value)
if ‘ham‘==temp[i-1]:
dataset1.append(0)
else:
dataset1.append(1)
for r in range(1ws.nrows):
dataset2.append(ws.cell(r1).value)
def textHandle(bigString):
#分词,有的在网上找到的例子中创建了停止词列表将那些无关语义表达的词如“一天”删去
list1 = jieba.lcut(bigString)
newList = [re.sub(r‘\W*‘‘‘s) for s in list1]
#将不是字母,数字,下划线,汉字的字符删去
return[tok.lower() for tok in newList if len(tok) > 0]
for i in range(len(dataset2)): #将分好的词存入到列表中
dataset.append(textHandle(dataset2[i]))
#测试用 print(dataset)
def createVocabList(dataSet):
vocabSet=set([]) #创建一个空集
for document in dataSet:
vocabSet=vocabSet|set(document) #取两个集合的并集
return list(vocabSet) #以list的方式返回结果
vocabList=createVocabList(dataset)
#该变量是已分好词的列表
# print(createVocabList(dataset)) 测试用
def setOfWords2Vec(vocabListinputSet):
returnVec=np.zeros(len(vocabList)) #生成零向量的array
for word in inputSet:
if word in vocabList:
returnVec[vocabList.index(word)]=1 #单词出现则记为1
else: print(‘the word:%s is not in my Vocabulary!‘% word)
return returnVec #返回0.1向量
#测试用 for i in range(149):
#测试用 print(setOfWords2Vec(vocabListdataset[i]))
#测试用 8127 print(len(vocabList))
#现在要做 减少8000维度经过一番想法,还是改用词集模型
def trainNB(trainDataSettrainLabels):
numTrains = len(trainDataSet) #训练数据组数
numWords = len(trainDataSet[0]) #每组训练的大小
pClass1 = sum(trainLabels)/float(numTrains) #垃圾邮件出现的概率
p0Num = np.ones(numWords) #正常邮件分词出现频率
p1Num = np.ones(numWords) #垃圾邮件分词出现频率
p0SumWords = 2.0 #正常邮件中分词总数
p1SumWords = 2.0 #垃圾邮件中分词总数
for i in range(numTrains):
if trainLabels[i]==1:
p1Num += trainDataSet[i] #统计垃圾邮件各分词
else:
p0Num += trainDataSet[i] #统计正常邮件各分词
p0SumWords = sum(p0Num)
p1SumWords = sum(p1Num)
p0Vect = p0Num/p0SumWords #正常邮件中各分词出现概率
p1Vect = p1Num/p1SumWords #垃圾邮件中各分词出现概率
return pClass1p0Vectp1Vect
def classifyNB(vec2Classifyp0Vecp1VecpClass1):
temp0 = vec2Classify*p0Vec
temp1 = vec2Classify*p1Vec
temp00 = []
temp11 = []
for x in temp0:
if x>0:
temp00.append(math.log(x))
else:
temp00.append(0)
for x in temp1:
if x>0:
temp11.append(math.log(x))
else:
temp11.append(0)
p1=sum(temp11)+math.log(pClass1)
p0=sum(temp
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6937 2019-04-14 10:32 bayes.py
文件 114184 2019-04-14 00:44 chinesespam.xlsx
----------- --------- ---------- ----- ----
121121 2
- 上一篇:Python爬虫爬取豆瓣电影
- 下一篇:GA-BP算法的python实现
相关资源
- 二级考试python试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
- 一个简单的python爬虫
- csv文件行列转换python实现代码
- Python操作Mysql教程手册
- Python Machine Learning Case Studies
- python获取硬件信息
评论
共有 条评论