博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟我学算法-贝叶斯拼写检查器
阅读量:6691 次
发布时间:2019-06-25

本文共 1399 字,大约阅读时间需要 4 分钟。

p(h+|D) = p(h) * p(D|h+) / p(D)  表示一个单词输错的概率 = 单词的词频 * 一个输错单词的可能的正确单词的数量

p(h-|D) = p(h) * p(D|h-) / p(D)

 

第一步:读取词库,通过正则找出每个单词,并统计单词的词频

import  collections, re#找出所有的单词,并且变成小写def word(text): return re.findall('[a-z]+', text.lower())#晒出内容的词频def train(feature):    model = collections.defaultdict(lambda :1)    for f in feature:        model[f] += 1    return modelNWORDS = train(word(open('big.txt').read()))

第二步 : 模拟一个错误单词的其他拼写可能性

alphabet = 'abcdefghijklmnopqrstuvwxyz'# 编辑出其他拼写的可能性def edits1(word):    n = len(word)    return set([word[0:i]+word[i+1:] for i in range(n)] +                     # deletion               [word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)] + # transposition               [word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet] + # alteration               [word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet])

第三步: 判断其他拼写是否在词库中

#如果word在词库中就返回def known(word):    return set(w for w in word if w in NWORDS)

第四步: 我们对模拟的其他拼写可能性进行再一次的模拟

#对第一次变换再进行一次,如果存在的话,就返回def known_edits2(word):    return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)

第五步: 进行优先选择,优先是正确的,然后是第一次模拟,然后是第二次模拟,最后是返回该值

def correct(word):    #从前到后进行判断选择    candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]    # 结果中选择概率最大的    return max(candidates, key=lambda w: NWORDS[w])

 

转载于:https://www.cnblogs.com/my-love-is-python/p/9517974.html

你可能感兴趣的文章
chrome扩展调试:background.html如何调试?
查看>>
关于嵌入式安全性的6个要点
查看>>
Hibernate分页
查看>>
Drawable解析4——StateListDrawable和AnimationDrawable
查看>>
如何使用Hanlp加载大字典
查看>>
特斯拉Model 3进化不止 传统车企到底应该学什么? ...
查看>>
1月18日云栖精选夜读 | Euler 今日问世!国内首个工业级的图深度学习开源框架,阿里妈妈造 ...
查看>>
4月云栖社区最新技术活动预告
查看>>
我的JAVA面试经验(3年左右工作经验)
查看>>
(十五)Java springcloud B2B2C o2o多用户商城 springcloud架构-commonservice-sso...
查看>>
新能源汽车屡着火,AIoT提供了保命招
查看>>
向蚂蚁学习!六足机器人可利用偏振太阳光实现精确导航 ...
查看>>
大数据开发学习路线,如何快速成为大数据工程师?
查看>>
脚本填报表的条件查询
查看>>
好程序员web前端分享js技巧和js中一些常见的陷阱
查看>>
从一个开发的角度看负载均衡和LVS
查看>>
Spring Boot(12)——使用MongoDB
查看>>
c++基础(上) 听课流水账
查看>>
Observable
查看>>
k8s使用deployment升级
查看>>