位置: 编程技术 - 正文

21行Python代码实现拼写检查器(20行的python编程题)

编辑:rootadmin

推荐整理分享21行Python代码实现拼写检查器(20行的python编程题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python代码200行左右,20行的python编程题,python150行代码,python200行代码,python100行代码案例,python150行代码,python120行代码,python120行代码,内容如对您有帮助,希望把文章链接给更多的朋友!

引入

大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供非常好的拼写检查,比如你输入 speling,谷歌会马上返回 spelling。下面是用行python代码实现的一个简易但是具备完整功能的拼写检查器。

代码

除了这段代码外,作为机器学习的一部分,肯定还应该有大量的样本数据,准备了big.txt作为我们的样本数据。

背后原理

上面的代码是基于贝叶斯来实现的,事实上谷歌百度实现的拼写检查也是通过贝叶斯实现,不过肯定比这个复杂多了。首先简单介绍一下背后的原理,如果读者之前了解过了,可以跳过这段。给一个词,我们试图选取一个最可能的正确的的拼写建议(建议也可能就是输入的单词)。有时也不清楚(比如lates应该被更正为late或者latest?),我们用概率决定把哪一个作为建议。我们从跟原始词w相关的所有可能的正确拼写中找到可能性最大的那个拼写建议c:

通过贝叶斯定理,上式可以转化为

21行Python代码实现拼写检查器(20行的python编程题)

下面介绍一下上式中的含义:

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中的单词

re.findall(‘[a-z]+'是利用python正则表达式模块,提取所有的符合'[a-z]+'条件的,也就是由字母组成的单词。(这里不详细介绍正则表达式了,有兴趣的同学可以看 正则表达式简介。text.lower()是将文本转化为小写字母,也就是“the”和“The”一样定义为同一个单词。

利用train()函数计算每个单词出现的次数然后训练出一个合适的模型

这样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的集合:

相关论文显示,-%的拼写错误跟想要拼写的单词都只有1个编辑距离,如果觉得一次编辑不够,那我们再来一次

同时还可能有编辑距离为0次的即本身就拼写正确的:

我们假设编辑距离1次的概率远大于2次的,0次的远大于1次的。下面通过correct函数先选择编辑距离最小的单词,其对应的P(w|c)就会越大,作为候选单词,再选择P(c)最大的那个单词作为拼写建议

标签: 20行的python编程题

本文链接地址:https://www.jiuchutong.com/biancheng/381304.html 转载请保留说明!

上一篇:Python字符串、元组、列表、字典互相转换的方法(python的字符串处理)

下一篇:基于Python Shell获取hostname和fqdn释疑(python-shell)

  • 长期股权投资产生的投资收益属不属于非经常性损益
  • 私立幼儿园需要纳税吗
  • 电子税务局的购票方怎么删除
  • 累进税率的税种有哪些
  • 机票和发票是一样的吗
  • 会计中管理费用和财务费用的区别
  • 增值税进项税没那么多,申报表多填
  • 从价计征房产税怎么算 原值和出租房原值
  • 印花税按什么金额吗
  • 收入与支出的差异
  • 如何确定一个企业在网络营销中的目标受众?
  • 小规模转一般纳税人需要什么条件
  • 个人所得税算错
  • 季度不满30万免增值税如何结转
  • 初始余额录入时需要录入什么
  • 轿车被盗
  • 双倍余额递减法如何计算
  • 计件工资的计算
  • 企业收到税务局退税分录
  • 个人所得税免征项目有哪些
  • 公司买的设备
  • 企业收付款流程图
  • 法院的诉讼费和保全费怎么算
  • 未做账怎么补账
  • 企业收到政府补助时,无需开发票,双方根据银行电汇单
  • 王者荣耀中雅典娜的战争女神多少钱
  • 上市公司发行股票会计分录
  • 苹果电脑双系统好不好
  • PHP:curl_multi_add_handle()的用法_cURL函数
  • 企业公益性捐赠扣除限额
  • php递归函数的例子
  • 公司名称变更重新刻章
  • 点云目标检测数据集
  • PHP:shell_exec()的用法_命令行函数
  • 企业汇算清缴费用
  • 报销员工餐费属于哪个科目
  • 呆账损失是什么意思
  • 呆账核销分录
  • 承担客户车辆维修责任
  • 记账凭证和原始凭证都是登记账簿的直接依据
  • 人工智能导论课后题答案
  • 机器学习--使用朴素贝叶斯进行垃圾邮件分类
  • trainer 平替
  • 实现php搜索框代码
  • 增值税发票认证期限是多久
  • 采购和销售都做的叫什么
  • 哪些税金不需要通过应交税费科目核算
  • 金蝶标准版怎么查应收应付款
  • 定额的个体户怎么交税
  • 一般纳税人可以转小规模纳税人吗
  • 小规模都是季度报税吗
  • 物品登记制度
  • 火车票可以抵扣进项税
  • 营运资金周转率是什么指标
  • 村委会靠什么赚钱
  • 2021年购买土地需要缴纳什么税
  • 出售捐赠物资
  • 代销手续费如何做分录
  • 增值税附加税减半政策
  • 既有从价又有从租如何计算房产税
  • 什么费用可以列入研发费用
  • 资本公积只能转现金吗
  • 失控发票进项税转出企业无法承担所得税怎么办
  • freebsd做服务器
  • macos dock栏
  • 史上最详细的mrtg(Multi Router Traffic Grapher)设置说明
  • win10升级版本后还要激活吗
  • linux系统怎么复制文件到u盘
  • bootstrap怎样为进度条添加动画
  • Intermediate Unity 3D for iOS: Part 3/3
  • android Lollipop(5.0)--touch feedback(触摸反馈)
  • js class实现原理
  • Android自定义标签选择面板,自定义ViewGroup
  • UNITE 2015 TAIPEI 五大系列重要議題搶鮮看!
  • 公司信用等级b级是什么意思
  • 开具红字增值税专用发票通知单
  • 山东省地税局电话号码
  • 安徽省地方税务局刘利庆
  • 民办非企业需要办理税务登记吗
  • 建行代理贵金属签约
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设