日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【小实验讲解】贝叶斯拼写检查器

發布時間:2024/9/30 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小实验讲解】贝叶斯拼写检查器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

貝葉斯拼寫檢查器

  • python代碼
    • 拼寫檢查器的代碼+注釋

python代碼

big.txt只是一個語料庫大家網上可以找得到。

拼寫檢查器的代碼+注釋

# ##求解: 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 collections import re# 所有單詞以及出現的次數 Dict_Word_Frequency = ''def get_Words(text):'''把語料中的單詞全部抽取出來, 轉成小寫, 并且去除單詞中間的特殊符號'''new_text = re.findall('[a-z]+',text.lower())return new_textdef get_Word_Frequency(words):'''獲取詞頻,統計每個單詞出現的次數'''# 建立字典(鍵為單詞名,值為詞頻),默認每個單詞出現一次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:])# 順序調換的(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 就會選取這個集合, 而不繼續計算后面的'''candidates = known([word]) or known(calculate_Edits1(word)) or calculate_Edits2(word) or [word]# 根據詞頻選擇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()# 把語料中的單詞全部抽取出來, 轉成小寫, 并且去除單詞中間的特殊符號All_New_Word_Text = get_Words(All_Word_Text)# 從所有單詞中獲取詞頻Dict_Word_Frequency = get_Word_Frequency(All_New_Word_Text)# 進行拼寫檢查print(correct('thi'))

總結

以上是生活随笔為你收集整理的【小实验讲解】贝叶斯拼写检查器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。