#coding=utf-8
'''貝葉斯分類之拼寫檢查
原理: 1.統計每個單詞出現的概率
2.計算輸入單詞與詞典中正確單詞的距離
3.找到概率最大的單詞
'''import re
import collections
#提文字中的單詞
defwords
(text):
return re.findall('[a-z]+',text.lower())
#統計每個單詞出現次數
deftrain
(features):
model = collections.defaultdict(lambda :1)
for f in features:
model[f]+=1
return model
#測試文字
test_txt = 'important information about your specific rights and restrictions'
alphabet = 'abcdefghijklmnopqrstuvwxyz'
defedits1
(word):
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in splits if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]
replaces = [a + c + b[1:] for a, b in splits for c in alphabet if b]
inserts = [a + c + b for a, b in splits for c in alphabet]
return set(deletes + transposes + replaces + inserts)
defedits2
(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1))
nwords = train(words(test_txt))
defknown_edits2
(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in nwords)
defknown
(words):
return set(w for w in words if w in nwords)
defcorrect
(word):
candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
return max(candidates, key=nwords.get)
print correct('you')
貝葉斯拼寫檢查器
要是遇到我們從來沒有過見過的新詞怎麼辦.假如說乙個詞拼寫完全正確,但是語料庫中沒有包含這個詞,從而這個詞也永遠不會出現在訓練集中.於是,我們就要返回出現這個詞的概率是0.這個情況不太妙,因為概率為0這個代表了這個事件絕對不可能發生,而在我們的概率模型中,我們期望用乙個很小的概率來代表這種情況.lam...
貝葉斯拼寫檢查器
p w c 在使用者想鍵入 c 的情況下敲成 w 的概率.因為這個是代表使用者會以多大的概率把 c 敲錯成 w argmaxc,用來列舉所有可能的 c 並且選取概率最大的 import re,collections 把語料中的單詞全部抽取出來,轉成小寫,並且去除單詞中間的特殊符號 詞頻統計,並把最少...
貝葉斯拼寫檢查器
本拼寫檢查器是基於樸素貝葉斯的基礎來寫的,貝葉斯公式以及原理就不在詳述。直接上 import re,collections defwords text return re.findall a z text.lower deftrain features model collections.defau...