機器學習實戰——樸素貝葉斯Python實現記錄
問題:regEx= re.compile('\\W*')
屬於列印錯誤。
正確: regEx = re.compile('\W*')
regEx = re.compile('\W*')
關於'\W' 和'\w'區別,可參考部落格:https://blog.csdn.net/wl_ss/article/details/78241782
正則表示式元字元的具體應用:
/fo+/ 因為上述正則表示式中包含“+”元字元,表示可以與目標物件中的 “fool”, “fo”, 或者 “football”等在字母f後面連續出現一個或多個字母o的字串相匹配。
/eg*/ 因為上述正則表示式中包含“*”元字元,表示可以與目標物件中的 “easy”, “ego”, 或者 “egg”等在字母e後面連續出現零個或多個字母g的字串相匹配。
/Wil?/ 因為上述正則表示式中包含“?”元字元,表示可以與目標物件中的 “Win”, 或者“Wilson”,等在字母i後面連續出現零個或一個字母l的字串相匹配。
有時候不知道要匹配多少字元。為了能適應這種不確定性,正則表示式支援限定符的概念。這些限定符可以指定正則表示式的一個給定元件必須要出現多少次才能滿足匹配。
{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
{n,} n 是一個非負整數。至少匹配 n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價於 'o+'。'o{0,}' 則等價於 'o*'。
{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。
除了元字元之外,使用者還可以精確指定模式在匹配物件中出現的頻率。例如,/jim {2,6}/ 上述正則表示式規定字元m可以在匹配物件中連續出現2-6次,因此,上述正則表示式可以同jimmy或jimmmmmy等字串相匹配。
在對如何使用正則表示式有了初步瞭解之後,我們來看一下其它幾個重要的元字元的使用方式。
程式碼
\s:用於匹配單個空格符,包括tab鍵和換行符;
\S:用於匹配除單個空格符之外的所有字元;
\d:用於匹配從0到9的數字;
\w:用於匹配字母,數字或下劃線字元;
\W:用於匹配所有與\w不匹配的字元;
. :用於匹配除換行符之外的所有字元。
(說明:我們可以把\s和\S以及\w和\W看作互為逆運算)
下面,我們就通過例項看一下如何在正則表示式中使用上述元字元。
/\s+/ 上述正則表示式可以用於匹配目標物件中的一個或多個空格字元。
/\d000/ 如果我們手中有一份複雜的財務報表,那麼我們可以通過上述正則表示式輕而易舉的查詢到所有總額達千元的款項。
除了我們以上所介紹的元字元之外,正則表示式中還具有另外一種較為獨特的專用字元,即定位符。定位符用於規定匹配模式在目標物件中的出現位置。 較為常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。
問題:FileNotFoundError: [Errno 2] No such file or directory: 'email/ham/6.txt'
解決方案:簡單點.............把這個資料夾直接拖到Python在C盤的安裝目錄裡。
至於目錄在哪裡....
常用方法是:
開啟我們的cmd命令
輸入Python
輸入 import sys
輸入 print(sys.path)
列表中的第四個將是你的安裝路徑 就像 :C:\Users\34856\AppData\Local\Programs\Python\Python36
這種樣子
最簡單的方法!
開啟Python的IDLE介面 點Open ,基本上開啟的路徑就是python的預設路徑。
問題:TypeError: 'range' object doesn't support item deletion
原因:python3.x range返回的是range物件,不返回陣列物件
解決方法:
把 trainingSet = range(50) 改為 trainingSet = list(range(50))
問題:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte sequence
解決辦法:開啟email\ham\23.txt,找到SciFinance?,把?替換成空格即可。
問題:IndexError: list index out of range
第1種可能情況
list[index]index超出範圍,也就是常說的陣列越界
第2種可能情況
list是一個空的 沒有一個元素