资源简介
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实现
相关资源
- GA-BP算法的python实现
- Python爬虫爬取豆瓣电影
- python调用cplex解决tsp问题
- 朴素贝叶斯算法python底层代码
- 一个简单Python 代码 爬取天气信息
- HMM预测天气,python实现
- [难度中级]Python前后端分离开发Vue+D
- python实现图像灰度共生矩阵
- python3零基础学习视频共20周带源码
- python采集阿里云监控sdk数据
- 进程管理实验
- 线性回归做房价预测 python源码
- python操作tsc打印机打印标签
- python处理word文件:win32com用法详解
- CNN_源代码
- 基于python的小型搜索引擎
- HOG_SVM的python实现
- python编写的类似QQ的聊天工具
- scrapy 封装的爬取社保信息
- 用Python实现语音的传输功能
- python实现谱聚类代码并进行可视化
- 解析pcap数据包
- Python实现香农码_费诺码_霍夫曼码
- python svm 源码
- 基于python的推荐系统库
- 本地两个文件夹同步,python语言,l
- 图像相似度计算python
- 交大python课大作业
- 基于selenium模拟天眼查登录并爬取企业
- python小游戏完美解决大作业.zip
评论
共有 条评论