class spellcheck(object):#拼寫糾錯
def __init__(self,file_name):
content = open(file_name).read()
self.words = re.findall('[a-za-z]+',content)
self.alphabet = 'abcdefghijklmnopqrstuvwxyz'
self.count_dict = collections.defaultdict(lambda :1)
def fit(self):
'''模型訓練,實際的訓練過程就是統計詞頻
:return:
'''for one_word in self.words:
self.count_dict[one_word.lower()] += 1
def edits1(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]) # 插入
def known(self,words):
'''判斷words列表是否在語料庫的單詞列表中
words :判斷單詞列表,是乙個list
'''return set(w for w in words if w in self.count_dict)
def predict(self,p_word):
'''**錯寫單詞的正確拼寫
:param p_word: 需要**的單詞
:return:
'''#先判斷p_word是否正確拼寫,再判斷一次編輯距離的正確拼寫
canditates = self.known([p_word]) or self.known((self.edits1(p_word))) or [p_word]
return max(canditates,key=lambda x:self.count_dict[x])
spell = spellcheck('big.txt')
spell.fit()
print(spell.predict('knon'))
# 結果: know
print(spell.predict('correcr'))
# 結果: correct
BK樹 拼寫檢查器
bk樹或者稱為burkhard keller樹,是一種基於樹的資料結構,被設計於快速查詢近似字串匹配,比方說拼寫檢查器,或模糊查詢,當搜尋 aeek 時能返回 seek 和 peek 為何bk trees這麼酷,因為除了窮舉搜尋,沒有其他顯而易見的解決方法,並且它能以簡單和優雅的方法大幅度提公升搜尋...
python 拼寫檢查
無意中刷微博看到這篇文章作者用很簡短的語句寫了乙個拼寫檢查的python程式。看完之後發現原來拼寫檢查的原理是這樣的,之前感覺應該是很高深的東西。但是由於對python中lambda表示式的不怎麼理解於是,我就又憑著自己的理解簡單的寫了一遍。沒有原文中作者的優化部分,只是簡單的實現了功能。而且是只有...
單詞拼寫檢查
給定n個單詞 n 10000 給定m個查詢 輸出無法查詢見的單詞的個數 分析 貌似是雜湊表的入門題?我覺得好難。做雜湊表需要一些技巧的,大概就是對單詞的首 中 尾的字元順序碼加權,方便插入也方便查詢。遇到be和bee這種單詞可能費一些時間,不過總的來說還是很快的。單詞拼寫檢查 include inc...