【小实验讲解】贝叶斯拼写检查器
生活随笔
收集整理的這篇文章主要介紹了
【小实验讲解】贝叶斯拼写检查器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
貝葉斯拼寫檢查器
- python代碼
- 拼寫檢查器的代碼+注釋
python代碼
big.txt只是一個語料庫大家網(wǎng)上可以找得到。
拼寫檢查器的代碼+注釋
# ##求解: argmaxc P(c|w) > argmaxc P(w|c) P(c) / P(w) # - P(c), 文章中出現(xiàn)一個正確拼寫詞c的概率,也就是說,在英語文章中,c出現(xiàn)的概率有多大 # - P(w|c). 在用戶想鍵入c的情況下敲成心w的概率、因為這個是代表用戶會以多大的概率把c敲錯成w。 # - argmaxc, 用來枚舉所有可能的c并且選取概率最大的import collections import re# 所有單詞以及出現(xiàn)的次數(shù) Dict_Word_Frequency = ''def get_Words(text):'''把語料中的單詞全部抽取出來, 轉(zhuǎn)成小寫, 并且去除單詞中間的特殊符號'''new_text = re.findall('[a-z]+',text.lower())return new_textdef get_Word_Frequency(words):'''獲取詞頻,統(tǒng)計每個單詞出現(xiàn)的次數(shù)'''# 建立字典(鍵為單詞名,值為詞頻),默認(rèn)每個單詞出現(xiàn)一次model = collections.defaultdict(lambda :1)# 為每一個單詞計算詞頻for i in words:model[i] = model[i] + 1return modeldef calculate_Edits1(word):'''返回所有編輯距離為1的單詞集合'''# 所有字母alphabet = 'abcdefghijklmnopqrstuvwxyz'# 單詞長度n = len(word)# 所有可能拼錯的的單詞集合word_sets =set()# 缺少單詞的(eg:the-th)for i in range(n):word_sets.add(word[0:i] + word[i + 1:])# 順序調(diào)換的(eg:the-eth)for i in range(n - 1):word_sets.add(word[0:i] + word[i + 1] + word[i] + word[i + 2:])# 單詞替換的(eg:the-thy)for c in alphabet:for i in range(n):word_sets.add(word[0:i] + c + word[i + 1:])# 單詞多加的(eg:the-thei)for c in alphabet:for i in range(n):word_sets.add(word[0:i] + c + word[i:])return word_setsdef calculate_Edits2(word):'''返回所有編輯距離為2的單詞集合,但只選擇正確的'''# 所有可能拼錯的的單詞集合word_sets =set()for ele1 in calculate_Edits1(word):for ele2 in calculate_Edits1(ele1):word_sets.add(ele2)return word_setsdef known(words):'''只把那些正確的詞作為候選詞'''word_sets = set()for w in words:if(w in Dict_Word_Frequency):word_sets.add(w)return word_setsdef correct(word):'''如果known(set)非空, candidate 就會選取這個集合, 而不繼續(xù)計算后面的'''candidates = known([word]) or known(calculate_Edits1(word)) or calculate_Edits2(word) or [word]# 根據(jù)詞頻選擇candidates中詞頻最高的拿出來返回return max(candidates, key=lambda w: Dict_Word_Frequency[w])if __name__ == '__main__':# 語料庫路徑File_Path = 'big.txt'# 讀取語料庫中的全部文字All_Word_Text = open(File_Path).read()# 把語料中的單詞全部抽取出來, 轉(zhuǎn)成小寫, 并且去除單詞中間的特殊符號All_New_Word_Text = get_Words(All_Word_Text)# 從所有單詞中獲取詞頻Dict_Word_Frequency = get_Word_Frequency(All_New_Word_Text)# 進行拼寫檢查print(correct('thi'))總結(jié)
以上是生活随笔為你收集整理的【小实验讲解】贝叶斯拼写检查器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【小代码讲解】独热编码(One-Hot编
- 下一篇: 【论文精读】PIFu: Pixel-Al