机器学习之贝叶斯(五) (12)

argmaxc, 用来枚举所有可能的 c 并且选取概率最大的

#贝叶斯构造单词拼写器 import re,collections #将text内容转成小写,并且用a-z匹配去掉特殊字符 def words(text): return re.findall('[a-z]+',text.lower()) #当出现新词时,设置其先验概率默认为1,因为为0的话则概率值都为0 def train(features): model = collections.defaultdict(lambda:1) for f in features: model[f] += 1 return model NWORDS = train(words(open('../Desktop/skilearn/big.txt').read())) print(NWORDS) alphabet = 'abcdefghijklmnopqrstuvwxyz' ''' 编辑距离: 两个词之间的编辑距离定义为使用了几次插入(在词中插入一个单字母), 删除(删除一个单字母), 交换(交换相邻两个字母), 替换(把一个字母换成另一个)的操作从一个词变到另一个词. ''' #编辑距离为1 的集合 def edits1(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 alphabet]+ #替换 [word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet]) #插入 #编辑距离等于2的集合 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) #指定优先级的计算 :0-1-2 def correct(word): candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word] return max(candidates, key=lambda w: NWORDS[w]) correct('morw') #more correct('goof') #good correct('appl') #apple

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjxfx.html