#!/usr/bin/env python #-*- coding:utf-8 -*- import bayes # listOPosts,listClasses = bayes.loadDataSet() # myVocabList = bayes.createVocabList(listOPosts) # print myVocabList # print bayes.setOfWords2Vec(myVocabList,listOPosts[0]) # trainMat = [] # for postinDoc in listOPosts: # trainMat.append(bayes.setOfWords2Vec(myVocabList,postinDoc)) # p0V,p1V,pAb = bayes.trainNB0(trainMat,listClasses) # print pAb # print sum(p0V) # # bayes.testingNB() # import re # regEx=re.compile('\\W*') # emailText=open('email/ham/6.txt').read() # listOfTokens=regEx.split(emailText) # print listOfTokens #bayes.spamTest() import feedparser ny=feedparser.parse('http://newyork.craigslist.org/stp/index.rss') sf=feedparser.parse('http://sfbay.craigslist.org/stp/index.rss') vocabList,pSF,pNY=bayes.localWords(ny,sf) bayes.getTopWords(ny,sf)
print "\n 第一个过滤器例子: 恶意留言区分" bayes.testingNB() #第二个例子 垃圾邮件区分 print "\n 第二个过滤器例子: 垃圾邮件区分" bayes.spamTest() #第三个例子 个人广告中录取区域倾向 #书中的RSS不能读取到信息,相关参数:书中的例子RSS len=60,将20个作为测试样本,其余40个作为训练样本,去掉的是频数前30个词。 # 本程序中使用的例子len=20,将5个个作为测试样本,其余15个作为训练样本,去掉频数为个位数是效果最好,这里暂时取3。 print "\n 第三个例子:个人广告RSS中录取区域倾向" nasa = feedparser.parse( 'http://www.nasa.gov/rss/dyn/image_of_the_day.rss') #len=60 NASA 航天新闻 ft = feedparser.parse( 'http://www.ftchinese.com/rss/news') #len=20,FT中文网(正式官方新闻)政治 经济 全球新闻 #sf = feedparser.parse('http://sports.yahoo.com/nba/teams/hou/rss.xml') #len=6 #sf = feedparser.parse('http://rss.yule.sohu.vocabSetcom/rss/yuletoutiao.xml') #搜狐娱乐(娱乐新闻)有时候len=30 有时却异常 ''' print "第一个的长度是:",len(nasa['entries']) print "第一个的内容是:",nasa['entries'] print "第二个的长度是:",len(ft['entries']) print "第二个的内容是:",ft['entries'] print "运行第一次的结果:" ''' #将两个RSS中的数据用来训练和预测 bayes.localWords(nasa, ft) #程序中已经完成了所有的操作,包括预测错误率的计算。 print "\n运行第二次的结果:" bayes.getTopWords(nasa, ft)
trainMat.append(bayes.setOfWords2Vec(myVocaBList, postinDoc)) p0v, p1v, pAb = bayes.trainNB0(trainMat, listClasses) pAb p0v p1v p2v = 1 - p1v # 测试模型 reload(bayes) bayes.testingNB() # 测试模型,看垃圾邮件分类器表现如何 reload(bayes) bayes.spamTest() # 测试模型,看详情的如何.... reload(bayes) import feedparser ny = feedparser.parse('http://newyork.craigslist.org/stp/index.rss') sf = feedparser.parse('http://sfbay.craigslist.org/stp/index.rss') # 这里获取的数据因为每次都不太一致,需要调整 # 1、随机生成训练集的数量 # 2、频率最高词的数量 vocabList, pSF, pNY = bayes.localWords(ny, sf) vocabList, pSF, pNY = bayes.localWords(sf, ny) # 看看刚刚的那些词对分类影响比较大 reload(bayes) bayes.getTopWords(ny, sf)
print "listOPosts[3]出现词汇:", bayes.setOfWords2Vec(myVocabList, listOPosts[3]) #4.5.2 训练算法:从词向量计算概率 #4.5.3 测试算法:根据现实情况修改分类器 listOPosts, listClasses = bayes.loadDataSet() myVocabList = bayes.createVocabList(listOPosts) trainMat = [] for postinDoc in listOPosts: print "postinDoc:", postinDoc trainMat.append(bayes.setOfWords2Vec(myVocabList, postinDoc)) print "trainMat:", trainMat p0V, p1V, pAb = bayes.trainNB0(trainMat, listClasses) print "p0V:", p0V print "p1V:", p1V print "pAb:", pAb bayes.testingNB() #4.6.2 测试算法:使用朴素贝叶斯进行交叉验证 bayes.spamTest() #4.7.1 收集数据:导入RSS源!出现bug ny = feedparser.parse('http://newyork.craigslist.org/stp/index.rss') sf = feedparser.parse('http://sfbay.craigslist.org/stp/index.rss') print "ny:", ny print "sf:", sf vocabList, pSF, pNY = bayes.localWords(ny, sf) vocabList, pSF, pNY = bayes.localWords(ny, sf) print "bayes.getTopWords(ny,sf):", bayes.getTopWords(ny, sf) #4.7.1 分析数据:显示地域相关的用词!出现bug bayes.getTopWords(ny, sf)