本拼寫檢查器是基於樸素貝葉斯的基礎來寫的,貝葉斯公式以及原理就不在詳述。直接上**
importre, 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
alphabet = '
abcdefghijklmnopqrstuvwxyz
'nwords = train(words(open('
d:/big.txt
').read()))
defedits1(word):
n =len(word)
return
set(
[word[0:i] + word[i + 1:] for i in range(n)] + #
deletion
[word[0:i] + word[i + 1] + word[i] + word[i + 2:] for i in range(n - 1)] + #
transposition
[word[0:i] + c + word[i + 1:] for i in range(n) for c in alphabet] + #
alteration
[word[0:i] + c + word[i:] for i in range(n + 1) for c in
alphabet]
)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):
cindidates = known([word]) or known(edits1(word)) or known_edits2(word) or
[word]
return max(cindidates, key=lambda
w: nwords[w])
print(correct('
tess
'))
以我現在的水平,現在看貝葉斯的原理還是懂的,但是編輯距離還不是很懂,以後慢慢變懂
貝葉斯拼寫檢查器
要是遇到我們從來沒有過見過的新詞怎麼辦.假如說乙個詞拼寫完全正確,但是語料庫中沒有包含這個詞,從而這個詞也永遠不會出現在訓練集中.於是,我們就要返回出現這個詞的概率是0.這個情況不太妙,因為概率為0這個代表了這個事件絕對不可能發生,而在我們的概率模型中,我們期望用乙個很小的概率來代表這種情況.lam...
貝葉斯拼寫檢查器
p w c 在使用者想鍵入 c 的情況下敲成 w 的概率.因為這個是代表使用者會以多大的概率把 c 敲錯成 w argmaxc,用來列舉所有可能的 c 並且選取概率最大的 import re,collections 把語料中的單詞全部抽取出來,轉成小寫,並且去除單詞中間的特殊符號 詞頻統計,並把最少...
貝葉斯拼寫檢查器 python
import re,collections defwords text return re.findall a z text.lower deftrain features model collections.defaultdict lambda 1 for f in features model ...