1、貝葉斯公式
p(a|d)=p(a)*p(d|a)/p(d);
可以應用於垃圾郵件的過濾和拼寫檢查
例如:對於拼寫檢查,寫出乙個單詞d,判斷該單詞為正確單詞a的概率。為上述條件概率的描述。
其中p(a)為先驗概率,可以根據現有的資料庫中的單詞,來獲得a單詞的概率p(a)。由於正確的單詞不僅僅有a,還有可能有a1,a2....
最終比較p(a1|d),p(a2|d),p(a3|d)...由於分母比較時相同,可以只比較分子p(a)*p(d|a)
p(a|d)正比於p(a)*p(d|a)
分別計算p(a1)*p(d|a1),p(a2)*p(d2|a)。其中p(d|a),例如在寫a=good,錯寫為d=gooe是的概率。是根據增刪減距離獲得。
若 p(a1)*p(d|a1)=p(a2)*p(d2|a),則根據實際生活中先驗概率的選擇p(a1),p(a2)大小選擇。
2、re和正規表示式的關係
1)re模組提供了對正規表示式的支援。
正規表示式式可匹配文字片段的模式
2)正規表示式
目的:通過匹配可以在文字查詢,將特定的模式進行替換,將文字分割成片段。
正規表示式的表示形式:
a、最簡單的正規表示式為普通字串 『python』
b、萬用字元.-- 通過特殊字串進行建立,可以將其表示為任意乙個字元
『.ython』 可以匹配 『uthon』,....
c、當字串本身含有特殊字元,利用兩個\\進行轉義。『python.org』可以用『python\\.org』表示
d、字符集[a-za-z0-9]只能將其作為乙個字元使用
『[pj]thon』與python 或jthon匹配但是不與『pjthon'使用。
注意例1 text='good morning! today we will go to the park,please be quiet!'
re.findall('[a-z]+',text.lower()) 文中的子串為均為a-z表示的單詞返回列表['good','morning','today','we', 'will', 'go','to','the', 'park','please', 'be', 'quiet']
例2『[python]』只能匹配『p』,'y'....
['python']只能匹配『python』
print(known(['will']))3、re模組中使用的函式輸出
re常用的重要函式
findall(pattern,string) 返回乙個列表。其中包含字串中所有與模式匹配的子串
sub(pat,rel,string[,count=0]) 將字串中與模式pat匹配的子串都替換為repl
split(pattern,string[,maxsplit=0]) 根據模式來分割字串
match(pattern,string[,flags]) 在字串開頭匹配模式
search(pattern,string[,flags]) 在字串中查詢模式
compile(pattern[ ,flags]) 用字串表示的正規表示式轉換為模式物件
importre,collections
#清除特殊符號
def words(text):return re.findall('
[a-z]+
',text.lower())
deftrain(features):
model=collections.defaultdict(lambda :1)
for f in
features:
model[f]+=1
return
model
nwords=train(words(open('
big.txt
').read()))
alphabelt='
abcdefghijklmnopqrstuvwxyz
'#編輯距離
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 alphabelt]+ #
alteration
[word[0:i]+c+word[i:] for i in range(n+1)for c in alphabelt]) #
insertion
defedits2(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in
nwords)
#定義有優先順序
def known(words):return set(w for w in words if w in
nwords)
defcorrect(word):
candidates=known([word])or known(edits1(word)or edits2(word)or
[word])
return max(candidates,key=lambda w:nwords[w])
print(correct('goode'))
good
貝葉斯實現拼寫檢查器
貝葉斯實現拼寫檢查器 import re,collections def words text return re.findall a z text.lower def train features model collections.defaultdict lambda 1 for f in fe...
貝葉斯拼寫檢查器
要是遇到我們從來沒有過見過的新詞怎麼辦.假如說乙個詞拼寫完全正確,但是語料庫中沒有包含這個詞,從而這個詞也永遠不會出現在訓練集中.於是,我們就要返回出現這個詞的概率是0.這個情況不太妙,因為概率為0這個代表了這個事件絕對不可能發生,而在我們的概率模型中,我們期望用乙個很小的概率來代表這種情況.lam...
貝葉斯拼寫檢查器
p w c 在使用者想鍵入 c 的情況下敲成 w 的概率.因為這個是代表使用者會以多大的概率把 c 敲錯成 w argmaxc,用來列舉所有可能的 c 並且選取概率最大的 import re,collections 把語料中的單詞全部抽取出來,轉成小寫,並且去除單詞中間的特殊符號 詞頻統計,並把最少...