错别字库php,php – 如何使用Levenshtein距离和错别字帐来创建类似字符串的阈值?...

首先,Levenshtein距离定义为将字符串A转换为字符串B所需的最小编辑数,其中编辑是插入,删除单个字符,或用另一个字符替换字符.因此,对于距离的某种定义,它是“两个字符串之间的差异”. =)

听起来你正在寻找一个距离函数F(A,B),它给出了字符串A和B之间的距离以及一个阈值N,其中距离小于N的字符串是拼写错误的候选者.除了Levenshtein距离之外,您还可以考虑Needleman–Wunsch.它基本上是相同的,但它允许您提供一个函数,以确定给定角色与另一个角色的接近程度.您可以将该算法与一组权重结合使用,这些权重反映了QWERTY键盘上键的位置,可以很好地找到拼写错误.但这会与国际键盘产生问题.

如果您有k个字符串并且想要找到潜在的拼写错误,则需要进行的比较次数为O(k ^ 2).另外,每个比较是O(len(A)* len(B)).所以如果你有一百万个字符串,如果你天真地做事,你会发现自己陷入困境.以下是关于如何加快速度的一些建议:

>道歉,如果这是显而易见的,但Levenshtein距离是对称的,所以请确保你不是计算F(A,B)和F(B,A).

> abs(len(A) – len(B))是字符串A和B之间距离的下限.因此,您可以跳过检查长度过于不同的字符串.

你可能遇到的一个问题是“第一圣”距离“第一街”有很远的距离,即使你可能想要考虑那些是相同的.处理此问题的最简单方法可能是在进行比较之前将字符串转换为规范形式.因此,您可以将所有字符串设置为小写,使用将“1st”映射到“first”的字典等.该字典可能会变得非常大,但我不知道更好的方法来处理这个问题.

既然你用php标记了这个问题,我假设你想用php来做这件事. PHP有一个内置的levenshtein()函数,但两个字符串必须是255个字符或更少.如果时间不够长,你就必须自己做.或者,您可以使用Python的difflib进行调查.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值