没办法,虽让Py2.x和Py3.x是两种不同的语言呢,不可避免撸这章的时候还是出现问题。
在“程序清单4-5,文件解析及完整的垃圾邮件测试函数”代码中应将里面的setOfWords2Vec改为bagOfWords2VecMN
错误:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte sequence
那是因为书上的下面这两行代码有点问题:
wordList = textParse(open('email/spam/%d.txt' % i).read()
wordList = textParse(open('email/ham/%d.txt' % i).read()
需要将上面的代码更为下面这两行:
wordList = textParse(open('email/spam/%d.txt' % i, "rb").read().decode('GBK','ignore') )
wordList = textParse(open('email/ham/%d.txt' % i, "rb").read().decode('GBK','ignore') )
因为有可能文件中存在类似“�”非法字符。
在运行程序清单中代码时候出现错误:
del(trainingSet[randIndex])
TypeError: 'range' object doesn't support item deletion
将代码del(trainingSet[randIndex])上面第4行代码trainingSet = range(50)改为:
trainingSet = list(range(50))
因为是python3中range不返回数组对象,而是返回range对象
运行<程序清单4-6 RSS源分类器及高频词去除函数>出现错误。
这些问题前面都已经遇到过了,轻车熟路。
AttributeError: 'dict' object has no attribute 'iteritems'
#将代码中的iteritems更改为items就好了
TypeError: 'range' object doesn't support item deletion
#将此行代码上面的第三行代码中的trainingSet = range(2*minLen)更改为
#trainingSet = list(range(2*minLen))就好了。
运行<程序清单4-7 最具表征性的词汇显示函数>时,如果用书上的
if p0V[i] > -6.0和if p1V[i] > -6.0时候则打印出来的非常长。将-6.0更改为大一些,则好一些,比如-5.4。
出现问题进行搜索参考博客:
[机器学习&数据挖掘]朴素贝叶斯数学原理
TypeError: cannot use a string pattern on a bytes-like object解决方法
处理UnicodeDecodeError: ‘XXX' codec can't decode bytes in position...的问题
python3中报错:TypeError: 'range' object doesn't support item deletion