樸樹貝葉斯分類 拼寫檢查

2021-08-17 14:36:54 字數 1567 閱讀 8991

#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...