python判断英文字母_Python+KNN算法判断单词相似度小案例

原标题:Python+KNN算法判断单词相似度小案例

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

fromcollections importCounter

defcheckAndModify(word):

# 待检测单词的字母频次

fre = dict(Counter(word))

# 待测单词中各字母频次与所有候选单词的距离,即字母频次之差

similars = {w:[fre[ch]-words[w].get(ch,0) forch inword]+[words[w][ch]-fre.get(ch,0) forch inw] forw inwords}

# 返回最接近的单词,即字母频次之差的平方和最小的单词

returnmin(similars.items(), key=lambdaitem:sum(map(lambdai:i**2, item[1])))[0]

# 候选单词

words = {'good', 'hello', 'world', 'python', 'fuguo', 'yantai', 'shandong', 'great'}

# 每个单词中字母频次

words = {word:dict(Counter(word)) forword inwords}

# 测试

forword in['god', 'hood','wello', 'helo', 'pychon', 'guguo', 'shangdong']:

print(word, ':', checkAndModify(word))

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

bebe728e2a8a4396a3848c8876bf747b_th.png

代码运行结果为:

god : shandong

hood : good

wello : hello

helo : hello

pychon : python

guguo : fuguo

shangdong : shandong返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值