我很好奇是否有人有一个很好的方法来选择字符串之间的最佳匹配情况。例如,假设我有一个表格,其中包含“Hi there”,“Hello”,“Hiya”,“hi”,“Hi”和“Hey there”等键。我想找到最接近“Hi”的匹配项。然后它首先匹配“Hi”。如果没有找到,那么“hi”然后是“Hiya”,依此类推。确定完美匹配的优先级,然后是低/大写匹配,然后具有最小数量的差异或长度差异。
我当前的方法看起来很笨重,首先检查完美匹配,然后使用string.match循环,用最接近的string.len保存任何一个。
答案 0 :(得分:0)
如果您不是仅仅寻找完美匹配,则需要使用一些指标作为相似度的度量,然后寻找最接近的匹配。
正如McBarby在评论中建议的那样,您可以使用Levenshtein距离,这是从字符串1到字符串2所需的单个字符编辑的最小数量。只需研究哪些指标可用以及哪种指标最适合您的需求。当然,您也可以定义自己的指标。
https://en.wikipedia.org/wiki/String_metric列出了许多其他字符串指标:
Sørensen-Dice系数
块距离或L1距离或城市街区距离
Jaro-Winkler距离
简单匹配系数(SMC)
Jaccard相似度或Jaccard系数或Tanimoto系数
Tversky指数
重叠系数
变化距离
Hellinger距离或Bhattacharyya距离
信息半径(Jensen-Shannon分歧)
歪斜分歧
混淆概率
Tau metric,Kullback-Leibler散度的近似值
Fellegi和Sunters指标(SFS)
最大匹配
基于语法的距离
TFIDF距离指标