Demo1 簡單的貝葉斯單詞糾錯器

2021-10-04 19:41:09 字數 2502 閱讀 7187

argmaxc p

(c|w)

-> argmaxc p

(w|c)

p(c)/p

(w)

p(c) 文章**現乙個正確拼寫詞 c 的概率, 也就是說, 在英語文章中, c 出現的概率有多大

p(w|c), 在使用者想鍵入 c 的情況下敲成 w 的概率. 因為這個是代表使用者會以多大的概率把 c 敲錯成 w

argmaxc, 用來列舉所有可能的 c 並且選取概率最大的

import re, collections

class

wordcorrection()

:def

__init__

(self,text_path=

'data.txt'):

self.alphabet =

'abcdefghijklmnopqrstuvwxyz'

self.__word = self.predeal(text_path)

self.__wordsf = self.countwordfrequency(

)# 把語料中的單詞全部抽取出來, 轉成小寫, 並且去除單詞中間的特殊符號

defpredeal

(self, text_path)

: text =

open

(text_path)

.read(

)return re.findall(

'[a-z]+'

, text.lower())

#統計詞頻(建模)

defcountwordfrequency

(self)

: model = collections.defaultdict(

lambda:1

)for f in self.__word:

model[f]+=1

return model

#去除錯誤候選詞

defknown

(self, words)

:return

set(w for w in words if w in self.__wordsf)

#編輯詞距(只改乙個字元)

defedits1

(self, word)

: n =

len(word)

return

set(

[word[

0:i]

+ word[i +1:

]for i in

range

(n)]

+# 刪除乙個字元

[word[

0:i]

+ word[i +1]

+ word[i]

+ word[i +2:

]for i in

range

(n -1)

]+# 交換次序

[word[

0:i]

+ c + word[i +1:

]for i in

range

(n)for c in self.alphabet]

+# 改乙個字元

[word[

0:i]

+ c + word[i:

]for i in

range

(n +1)

for c in self.alphabet]

)# 插入乙個字元

#編輯詞距(2個字元)

defknown_edits2

(self, word)

:return

set(e2 for e1 in self.edits1(word)

for e2 in self.edits1(e1)

if e2 in self.__wordsf)

#糾正結果

defcorrect

(self, word)

:# 正確 改乙個字元 2個 未出現字元

candidates = self.known(

[word]

)or self.known(self.edits1(word)

)or self.known_edits2(word)

or[word]

return

max(candidates, key=

lambda w: self.__wordsf[w]

)if __name__ ==

"__main__"

: obj = wordcorrection(

)for _ in

range(3

):w =

input

("輸入單詞:"

)print

("糾錯結果:"

貝葉斯模型的理解(1)

一直以來,都在聽說貝葉斯概率模型,這裡記錄一下自己對貝葉斯概率模型的一些理解。貝葉斯模型的建立主要有3個概念 1.先驗概率。2.最大似然函式。3.後驗概率 這3個概念怎麼建立聯絡呢,以投硬幣這個簡單的例子來理解最好。例子 首先為拋硬幣制定乙個規則 押一塊錢,拋10次硬幣,出現正面的次數小於等於6次就...

樸素貝葉斯模型的簡單實現

coding utf 8 from numpy import def loaddataset postinglist my dog has flea problems help please maybe not take him to dog park stupid my dalmation is ...

分類器的簡單應用 NBC 樸素貝葉斯

分類的問題 分類的使用 根據名字判別性別 文字分類 詞性分類 句子分割 識別對話行為 分類演算法 樸素貝葉斯 決策樹 根據名字判別性別 建立分類器 1 確定輸入特徵 2 劃分資料集 3 使用訓練集構建分類器 4 使用測試集測試分類器的效果 def gender features word retur...