沒辦法寥假,雖讓Py2.x和Py3.x是兩種不同的語言呢如输,不可避免擼這章的時候還是出現(xiàn)問題之拨。
在“程序清單4-5轻掩,文件解析及完整的垃圾郵件測試函數(shù)”代碼中應將里面的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') )
因為有可能文件中存在類似“?”非法字符糙捺。
在運行程序清單中代碼時候出現(xiàn)錯誤:
del(trainingSet[randIndex])
TypeError: 'range' object doesn't support item deletion
將代碼del(trainingSet[randIndex])上面第4行代碼trainingSet = range(50)改為:
trainingSet = list(range(50))
因為是python3中range不返回數(shù)組對象捂刺,而是返回range對象
運行<程序清單4-6 RSS源分類器及高頻詞去除函數(shù)>出現(xiàn)錯誤殴蹄。
這些問題前面都已經(jīng)遇到過了,輕車熟路粪滤。
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 最具表征性的詞匯顯示函數(shù)>時派撕,如果用書上的
if p0V[i] > -6.0和if p1V[i] > -6.0時候則打印出來的非常長隧熙。將-6.0更改為大一些片挂,則好一些,比如-5.4贞盯。
出現(xiàn)問題進行搜索參考博客:
[機器學習&數(shù)據(jù)挖掘]樸素貝葉斯數(shù)學原理
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