百度了一下,似乎都不太復雜,我選擇了兩個不需要安裝第三方組件的例子,地址分別如下
https://www.sohu.com/a/139947378_797291
https://zhuanlan.zhihu.com/p/268410388
整合了兩個例子,我認為我找到了我想要的代碼了,以下是我整理的源代碼
from difflib import SequenceMatcher from collections import Counter print("==========第一次測試================") # 候選單詞 words = {'good', 'hello', 'world', 'python','fuguo', 'yantai', 'shandong', 'great'} # 每個單詞中字母頻次 words = {word: dict(Counter(word)) for word in words} def checkAndModify(word): # 待檢測單詞的字母頻次 fre = dict(Counter(word)) # 待測單詞中各字母頻次與所有候選單詞的距離,即字母頻次之差 similars = {w: [fre[ch]-words[w].get(ch, 0) for ch in word] + [words[w][ch]-fre.get(ch, 0) for ch in w] for w in words} # 返回最接近的單詞,即字母頻次之差的平方和最小的單詞 return min(similars.items(), key=lambda item: sum(map(lambda i: i**2, item[1])))[0] # 測試 for word in ['god', 'hood', 'weloo', 'heloo', 'wello', 'helo', 'pychon', 'guguo', 'shangdong']: print(word, ':', checkAndModify(word)) print("==========第二次測試================") def similarity(a, b): return SequenceMatcher(None, a, b).ratio() def checkAndModify2(test): similars = {word: similarity(word,test) for word in words} return max(similars, key=similars.get) # 測試 for word in ['god', 'hood', 'weloo', 'heloo', 'wello', 'helo', 'pychon', 'guguo', 'shangdong']: print(word, ':', checkAndModify2(word))
以下的測試的結果

對於heloo第一個測試認為good是最接近的,第二個測試認為hello更為接近。我認為第二測試的結果。
