前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python+KNN算法判断单词相似度小案例

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

作者头像
Python小屋屋主
发布2018-04-16 17:08:56
1.2K0
发布2018-04-16 17:08:56
举报
文章被收录于专栏:Python小屋Python小屋

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档