本文代码用于判断待测单词与哪个候选单词最接近,判断标准为字母出现频次(直方图)最接近,只考虑了不小心的拼写错误,而没有考虑故意的拼写错误,例如故意把god写成dog,这可能会造成误判。当然误判率与判断相似的标准有非常大的关系,例如运行结果第一条就是错的(当然这在训练样本足够多的时候可以在一定程度上避免,虽然无法完全避免)。本文代码主要用来演示KNN算法原理以及Python字典推导式以及内置函数map()、min()、sum()和标准库对象Counter的用法。

from collections import Counter

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]

# 候选单词
words = {'good', 'hello', 'world', 'python', 'fuguo', 'yantai', 'shandong', 'great'}

# 每个单词中字母频次
words = {word:dict(Counter(word)) for word in words}

# 测试
for word in ['god', 'hood', 'wello', 'helo', 'pychon', 'guguo', 'shangdong']:
    print(word, ':', checkAndModify(word))

由于本文代码不好排版,所以附上代码截图以供参考,免得因为缩进问题而影响理解。

代码运行结果为:

god : shandong
hood : good
wello : hello
helo : hello
pychon : python
guguo : fuguo
shangdong : shandong

Python+KNN算法判断单词相似度小案例相关推荐

  1. python空气质量分析与预测_干货!如何用 Python+KNN 算法实现城市空气质量分析与预测?...

    原标题:干货!如何用 Python+KNN 算法实现城市空气质量分析与预测? 作者 | 李秋键 责编 | 伍杏玲 封图 | CSDN 付费下载自东方 IC 出品 | CSDN(ID:CSDNnews) ...

  2. KNN和K-means的区别 为什么KNN算法里的K越小模型会越复杂? 过拟合和欠拟合的偏差和方差问题

    这里将这三个问题在一起讲,仅仅是因为自己觉得有些联系,而且正好自己概念有些模糊. 1. KNN 和 K-means的区别:参考https://www.cnblogs.com/nucdy/p/63491 ...

  3. python幸运数字判断_幸运数字 小程序

    问题描述:1-N个数字,每个数字的范围-9999到9999,把这N个数字排序后,删除奇数位的数,然后把剩余的数按原位置排序后继续删除奇数位,直到剩余一个数为止,剩余的数就是幸运数,输出幸运数和它最初的 ...

  4. python爬取网页教程(一个小案例分享)

    一.为什么需要用爬虫? 为其他程序提供数据源,如搜索引擎(百度.Google等).数据分析.大数据等等. 二.python爬虫设计思路 1.首先确定需要爬取的网页URL地址 : 2.通过HTTP协议来 ...

  5. 〖Python零基础入门篇(64)〗- 小案例 - 猜拳游戏与数字猜猜猜

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  6. python递归详解+汉诺塔小案例_汉诺塔,python递归实现解法步骤

    def hanoi(n,x,y,z):#函数实现n个盘子在x,y,z,移动 if n==1: print(x, ' --> ', z) else: hanoi(n-1,x,z,y)#将n-1层个 ...

  7. Python使用Queue对象实现多线程同步小案例

    queue模块的Queue对象实现了多生产者/多消费者队列,尤其适合需要在多个线程之间进行信息交换的场合,实现了多线程编程所需要的所有锁语义. Queue对象主要实现了put()和get()方法,分别 ...

  8. Python+tkinter动态创建与销毁组件小案例

    本文代码演示了如何在tkinter窗体上动态创建组件以及销毁组件的方法. import tkinter import tkinter.messagebox import tkinter.simpled ...

  9. 【Python】一个房贷计算器功能的小案例

    题目要求: 房贷计算公式如下: 〉每月月供参考=贷款金额×[月利率×(1+月利率)^还款月数]÷{[(1+月利率)^还款月数]–1}>还款总额=每月月供参考×期限× 12 ≥支付利息=还款总额– ...

最新文章

  1. Bootstrap学习的点点滴滴
  2. dubbo学习过程、使用经验分享及实现原理简单介绍
  3. 给ModalPopupExtender控件添加弹出关闭等事件
  4. pyspark dataframe基本用法
  5. 左室短轴切面_【图】短轴超声切面 - 心脏解剖学 - 天山医学院
  6. 对学生公寓部建议和意见_学生公寓自主管理协会
  7. 路由器AP、路由、桥接模式有什么区别
  8. poj - 3723 Conscription(最大权森林)
  9. C盘\用户目录下\管理员文件夹 如何重命名?
  10. 斯凯奇诉爱马仕侵权——品牌发展需警惕知识产权侵权
  11. 二进制 转换 .java_如何在Java程序中将二进制转换为十进制?
  12. 服务器上qq邮件不能打开方式,qq邮箱打不开解决方法汇总
  13. SEOer必读:50个网站推广方法
  14. InstallShield软件详解
  15. 应用程序崩溃定位查找 (二)
  16. python入门论坛_PythonTab:Python中文开发者社区门户
  17. UDP是全双工通信的吗
  18. IDEMIA携手Unisys为澳大利亚内政事务部提供生物识别服务
  19. 实现NFS HA共享目录
  20. 如何理解无偏估计?无偏估计有什么用?

热门文章

  1. linux系统中agent服务器,Zabbix添加对Linux服务器的监控(Zabbix-Agent)
  2. tx2 fpga pcie无法读写_Cyclone V SOC(ARM+FPGA)开发文档_之开发流程详解
  3. linux挂载光盘装ftp服务,linux ftp安装和配置
  4. python调用opencv代码_Python调用OpenCV实现图像平滑代码实例
  5. python登录交换机执行命令_如何用Python脚本登录到交换机上修改配置?
  6. oracle 无效数字 0,oracle to_namber之后报ora-01722:无效数字
  7. java io怎么学_Java IO 初学者 怎么都弄不出来
  8. Spring+springmvc+hibernate+redis整合配置文件
  9. 程序设计思路报告快递运输路线优化系统
  10. 通讯录管理系统课设使用c编写基于链表增查删改分组文本操作随程序实时同步