distance - 使用 Levenshtein 距离匹配的匹配百分比排名

标签 distance percentage ranking levenshtein-distance

我正在尝试使用 Levenshtein 距离算法将单个搜索词与可能匹配的字典进行匹配。该算法返回一个距离,表示为将搜索字符串转换为匹配字符串所需的操作数。 我想以前“N”(例如 10)场比赛的排名百分比列表的形式显示结果。

由于搜索字符串可能比各个字典字符串更长或更短,因此将距离表示为百分比的适当逻辑是什么,这将定性地反射(reflect)每个结果“以百分比”与查询字符串的接近程度,100% 表示完全匹配。

我考虑了以下选项:

Q = query string
M = matched string
PM = Percentage Match
Option 1. PMi = (1 - Lev_distance(Q, Mi)/Strlen(Q)) * 100
Option 2. PMi = (1 - Lev_distance(Q, Mi)/max(Strlen(Q), strlen(Mi))) * 100

如果距离大于搜索字符串长度(其中匹配字符串很长),选项 1 可能会出现负百分比。例如,查询“ABC”与“ABC Corp.”匹配。将导致负匹配百分比。

选项 2 似乎并未在一组 Mi 中给出一致的百分比,因为每次计算可能会使用不同的分母,因此生成的百分比值不会标准化。

我能想到的唯一其他方法是放弃 lev_distance 与任一字符串长度的比较,而是将前“N”个匹配的比较距离呈现为反百分位等级(100-percentile-rank)。

有什么想法吗?有更好的方法吗?我一定错过了一些东西,因为编辑距离可能是模糊匹配最常见的算法,这一定是一个非常常见的问题。

最佳答案

我遇到了类似的问题,这个帖子帮助我找到了解决方案。希望它也能帮助其他人。

int levDis = Lev_distance(Q, Mi)
int bigger = max(strlen(Q), strlen(Mi))
double pct = (bigger - levDis) / bigger

如果两个字符串完全相同,则应返回 100%;如果完全不同,则应返回 0%。

(抱歉,如果我的英语不太好)

关于distance - 使用 Levenshtein 距离匹配的匹配百分比排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405440/

相关文章:

c++ - 获取迭代器错误的位置

algorithm - 搜索靠近一条线的点的更快方法

Matlab 投币模拟

ruby-on-rails - 计算 ruby 中真实元素的百分比

r - R中的累积排名第n项

statistics - 1 对 1 投票 : calculate ratings (Flickchart. com)

r - 在 R 中构造距离矩阵,但来自多个输入矩阵

c++ - 求从像素到边缘的距离

python - 百分比计算不起作用

machine-learning - SVM 排名仅适用于小型数据集