刚学习python第四章,朴素贝叶斯过滤垃圾邮件,发现有几段代码是有问题的,在今天的3.9python版本上是达不到书上的效果,作为新手的我,反复检查后发现了几处问题
(1)切割文本不能实现字母最小化问题
原文的代码如下:
def textParse(bigString): #input is big string, #output is word list
import re
listOfTokens = re.split(r'\W*', bigString)
return [tok.lower() for tok in listOfTokens if len(tok) > 2]
原文的代码执行后并不能直接把所有字母最小化,所以我做了点修改。
修改的代码如下:
def textParse(bigString):
listOfTokens = re.split(r'\W',bigString)
listOfTokens1=[]
for tok in listOfTokens:
tok=tok.lower()
if len(tok) > 2:
listOfTokens1.append(tok)
return listOfTokens1
(2)训练文档不能正确删除掉测试文档
书上的代码运行的结果就是把所有的文档放入了词库里面,导致测试文档不能正确测试,造成的原因是,del这个代码不能把range 对象里的元素删掉,把range对象改成list对象就好了。
原文的代码:
trainingSet = range(50); testSet=[]
for i in range(10):
randIndex = int(random.uniform(0,len(trainingSet)))
testSet.append(trainingSet[randIndex])
del(trainingSet[randIndex])
修改后的代码段
trainingSet = list(range(50)); testSet = [] #create test set
for i in range(10):
randIndex = int(np.random.uniform(0, len(trainingSet)))
testSet.append(trainingSet[randIndex])
del(trainingSet[randIndex])