专栏首页Python小屋Python+KNN算法判断单词相似度小案例

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

本文代码用于判断待测单词与哪个候选单词最接近,判断标准为字母出现频次(直方图)最接近,只考虑了不小心的拼写错误,而没有考虑故意的拼写错误,例如故意把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小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python字符串处理小案例

    连续5天30个小时的Python培训圆满结束,明天早上5点半出发赶飞机回烟台,晚上收拾行李的时候突然想起来20年前做过的一个C语言题目:假设有一个字符串,里面有...

    Python小屋屋主
  • 对Python列表进行封装和二次开发实现自定义栈结构

    设计自定义栈类,模拟入栈、出栈、判断栈是否为空、是否已满以及改变栈大小等操作。 class Stack: #构造方法 def __init__(self, ...

    Python小屋屋主
  • Python实现带有阻塞和超时放弃功能的队列结构

    本文代码对Python列表进行封装并模拟了队列结构,入队时如果队列已满则阻塞当前线程,超时则放弃;出队时如果队列已空则阻塞当前线程,超时则放弃。 import ...

    Python小屋屋主
  • 如何处理机器学习中类的不平衡问题

    不平衡类使机器学习的“准确性”受到破坏。这在机器学习(特别是分类)中是一个非常普遍的问题,在每个类中都有一个不成比例的数据集。标准的准确性不再可靠地度量性能,这...

    AiTechYun
  • Python|函数递归-sin之舞

    最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们...

    算法与编程之美
  • 建站者必须知道的常见网络安全攻防知识

    beifengtz
  • 基于 CentOS 搭建 FTP 文件服务

    此时,访问 ftp://192.168.1.170 可浏览机器上的 /var/ftp目录了。

    Javen
  • 面经手册 · 第11篇《StringBuilder 比 String 快?空嘴白牙的,证据呢!》

    面我的题开发都用不到,你为什么要问?可能这是大部分程序员求职时的经历,甚至也是大家讨厌和烦躁的点。明明给的是拧螺丝的钱、明明做的是写CRUD的事、明明担的是成工...

    小傅哥
  • Bugly 多渠道热更新解决方案

    Gradle使用productFlavors打渠道包的痛 有很多同学可能会采用配置productFlavors来打渠道包,主要是它是原生支持,方便开发者输出不...

    腾讯Bugly
  • Unity-Video

    祝你万事顺利

扫码关注云+社区

领取腾讯云代金券