亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

21行Python代碼實現拼寫檢查器

2020-01-04 17:48:49
字體:
來源:轉載
供稿:網友
21行python代碼實現的一個簡易但是具備完整功能的拼寫檢查器,感興趣的小伙伴們可以參考一下
 

引入

大家在使用谷歌或者百度搜索時,輸入搜索內容時,谷歌總是能提供非常好的拼寫檢查,比如你輸入 speling,谷歌會馬上返回 spelling。
下面是用21行python代碼實現的一個簡易但是具備完整功能的拼寫檢查器。

代碼

 

import re, collectionsdef words(text): return re.findall('[a-z]+', text.lower()) def train(features):  model = collections.defaultdict(lambda: 1)  for f in features:    model[f] += 1  return modelNWORDS = train(words(file('big.txt').read()))alphabet = 'abcdefghijklmnopqrstuvwxyz'def edits1(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)def known_edits2(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)def correct(word):  candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]  return max(candidates, key=NWORDS.get)correct函數是程序的入口,傳進去錯誤拼寫的單詞會返回正確。如:>>> correct("cpoy")'copy'>>> correct("engilsh")'english'>>> correct("sruprise")'surprise'

除了這段代碼外,作為機器學習的一部分,肯定還應該有大量的樣本數據,準備了big.txt作為我們的樣本數據。

背后原理

上面的代碼是基于貝葉斯來實現的,事實上谷歌百度實現的拼寫檢查也是通過貝葉斯實現,不過肯定比這個復雜多了。
首先簡單介紹一下背后的原理,如果讀者之前了解過了,可以跳過這段。
給一個詞,我們試圖選取一個最可能的正確的的拼寫建議(建議也可能就是輸入的單詞)。有時也不清楚(比如lates應該被更正為late或者latest?),我們用概率決定把哪一個作為建議。我們從跟原始詞w相關的所有可能的正確拼寫中找到可能性最大的那個拼寫建議c:

argmaxc P(c|w)

通過貝葉斯定理,上式可以轉化為

argmaxc P(w|c) P(c) / P(w)

下面介紹一下上式中的含義:

  • P(c|w)代表在輸入單詞w 的情況下,你本來想輸入 單詞c的概率。
  • P(w|c)代表用戶想輸入單詞c卻輸入w的概率,這個可以我們認為給定的。
  • P(c)代表在樣本數據中單詞c出現的概率
  • P(w)代表在樣本數字中單詞w出現的概率

可以確定P(w)對于所有可能的單詞c概率都是一樣的,所以上式可以轉換為
argmaxc P(w|c) P(c)
我們所有的代碼都是基于這個公式來的,下面分析具體代碼實現

代碼分析

利用words()函數提取big.txt中的單詞

def words(text): return re.findall('[a-z]+', text.lower())

re.findall(‘[a-z]+'是利用python正則表達式模塊,提取所有的符合'[a-z]+'條件的,也就是由字母組成的單詞。(這里不詳細介紹正則表達式了,有興趣的同學可以看 正則表達式簡介。text.lower()是將文本轉化為小寫字母,也就是“the”和“The”一樣定義為同一個單詞。

利用train()函數計算每個單詞出現的次數然后訓練出一個合適的模型

def train(features):  model = collections.defaultdict(lambda: 1)  for f in features:    model[f] += 1  return modelNWORDS = train(words(file('big.txt').read()))

這樣NWORDS[w]代表了單詞w在樣本中出現的次數。如果有一個單詞并沒有出現在我們的樣本中該怎么辦?處理方法是將他們的次數默認設為1,這里通過collections模塊和lambda表達式實現。collections.defaultdict()創建了一個默認的字典,lambda:1將這個字典中的每個值都默認設為1。

現在我們處理完了公式argmaxc P(w|c) P(c)中的P(c),接下來處理P(w|c)即想輸入單詞c卻錯誤地輸入單詞w的概率,通過 “edit distance“--將一個單詞變為另一個單詞所需要的編輯次數來衡量,一次edit可能是一次刪除,一個交換(兩個相鄰的字母),一次插入,一次修改。下面的函數返回一個將c進行一次編輯所有可能得到的單詞w的集合:

def edits1(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)

相關論文顯示,80-95%的拼寫錯誤跟想要拼寫的單詞都只有1個編輯距離,如果覺得一次編輯不夠,那我們再來一次

def known_edits2(word):  return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)

同時還可能有編輯距離為0次的即本身就拼寫正確的:

def known(words):  return set(w for w in words if w in NWORDS)

我們假設編輯距離1次的概率遠大于2次的,0次的遠大于1次的。下面通過correct函數先選擇編輯距離最小的單詞,其對應的P(w|c)就會越大,作為候選單詞,再選擇P(c)最大的那個單詞作為拼寫建議

def correct(word):  candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]  return max(candidates, key=NWORDS.get)

以上就是本文的全部內容,希望對大家學習python程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97国产在线观看| 久久精品99久久香蕉国产色戒| 亚洲变态欧美另类捆绑| 欧美日韩一区二区三区在线免费观看| 亚洲黄一区二区| 91丝袜美腿美女视频网站| 91久久久久久久| 日韩精品免费在线观看| 日韩免费电影在线观看| 国产成人综合精品| 91深夜福利视频| 欧美日韩国产影院| 亚洲欧美成人一区二区在线电影| 8x海外华人永久免费日韩内陆视频| 成人www视频在线观看| 美女国内精品自产拍在线播放| 亚洲日本中文字幕免费在线不卡| 国产精品永久免费视频| 欧美激情aaaa| 日韩成人av在线| 亚洲午夜av电影| 日韩在线欧美在线| 伊人青青综合网站| 成人写真福利网| 亚洲free性xxxx护士白浆| 日本成人在线视频网址| 538国产精品一区二区免费视频| 欧美亚洲成人免费| 97超视频免费观看| 日韩在线观看免费av| 亚洲色图50p| 亚洲精品久久久久久下一站| 亚洲欧美中文另类| 国产精品成av人在线视午夜片| 久久国内精品一国内精品| 亚洲激情免费观看| 亚洲人成电影网站色| 庆余年2免费日韩剧观看大牛| 亚洲国产精品成人一区二区| 欧美激情一级欧美精品| 国产成人一区二| 韩国19禁主播vip福利视频| 亚洲精品久久久久中文字幕二区| 91精品久久久久久综合乱菊| 欧美成人免费全部| www.亚洲成人| 亚洲精品国产精品自产a区红杏吧| 伊是香蕉大人久久| 国产亚洲精品久久久久动| 51视频国产精品一区二区| 97视频免费在线看| 国产69精品久久久久99| 欧美韩国理论所午夜片917电影| 日韩精品高清视频| 亚洲国产日韩欧美在线动漫| 国产主播在线一区| 国产精品午夜国产小视频| 国产精品美女网站| 91精品在线看| 亚洲aⅴ日韩av电影在线观看| 91最新国产视频| 成人黄在线观看| 日韩精品在线免费观看视频| 欧美麻豆久久久久久中文| 久久影院中文字幕| 91麻豆国产精品| 91在线观看欧美日韩| 国产成人激情小视频| 最新国产精品拍自在线播放| 不卡在线观看电视剧完整版| 中文字幕亚洲天堂| 欧美在线一区二区视频| 亚洲精品一区在线观看香蕉| 中文字幕日韩有码| 日韩一区视频在线| 中文字幕久久亚洲| 亚洲欧美在线播放| 九九九热精品免费视频观看网站| 91黑丝高跟在线| 日本在线观看天堂男亚洲| 亚洲激情免费观看| 中文字幕欧美国内| 国产主播欧美精品| 日韩在线视频免费观看| 亚洲欧美一区二区激情| 欧美人在线观看| 欧美丰满少妇xxxxx| 成人免费淫片视频软件| 欧美激情在线播放| 国产精品大陆在线观看| 日韩最新中文字幕电影免费看| 精品国产乱码久久久久酒店| 4p变态网欧美系列| 欧美电影在线观看| 国产欧美精品久久久| 亚洲成**性毛茸茸| 日韩av免费在线看| 欧美激情在线播放| 国产精品无av码在线观看| 久久久最新网址| 91久久国产综合久久91精品网站| 日韩中文字幕亚洲| 国产精品久久久精品| 一区二区三区高清国产| 国产精品xxx视频| 亚洲网址你懂得| 日产日韩在线亚洲欧美| 精品久久久久久久久久久久久| 亚洲最大av在线| 性色av一区二区三区红粉影视| 欧美尺度大的性做爰视频| 国产亚洲aⅴaaaaaa毛片| 欧美成人在线免费视频| 久久久爽爽爽美女图片| 久久人体大胆视频| 国产一区二区丝袜| 亚洲情综合五月天| 日韩美女在线看| 亚洲最大福利网站| 97香蕉超级碰碰久久免费的优势| 久久这里只有精品99| 国产欧美一区二区三区视频| 欧美日韩午夜激情| 亚洲最大福利视频| 久久中国妇女中文字幕| 国产在线98福利播放视频| 91社影院在线观看| 日韩精品在线播放| 国产99视频在线观看| 免费99精品国产自在在线| 国自产精品手机在线观看视频| 欧美极品少妇与黑人| 国产精品一区二区三区久久久| 欧美日韩999| 精品久久久久久久久久| 最近中文字幕mv在线一区二区三区四区| 亚洲欧洲在线看| 国产精品欧美激情| 日韩av影片在线观看| 国产91精品视频在线观看| 97免费视频在线播放| 久久精品国产v日韩v亚洲| 国产拍精品一二三| 欧美成人免费大片| 欧美成人h版在线观看| 日韩精品黄色网| 国产丝袜一区二区三区免费视频| 国产成人a亚洲精品| 在线亚洲欧美视频| 久久久999成人| 久久久久久久久91| 久久亚洲国产成人| 欧美大尺度电影在线观看| 国产精品国产三级国产专播精品人| 97在线免费观看| 亚洲第一中文字幕| 国产日产久久高清欧美一区| 亚洲天堂免费观看| 91精品国产高清| 欧美亚洲视频在线看网址| 欧美在线视频播放| 亚洲va久久久噜噜噜久久天堂| 九九热这里只有精品6| 91丝袜美腿美女视频网站|