Lua - 寻找字符串的最佳匹配

我很好奇是否有人有一种好的方法来选择字符串之间的最佳匹配。例如,假设我有一个带有键“嗨”,“Hello”,“Hiya”,“hi”,“Hi”,以及“Hey there”的表。然后我想要找到与“Hi”最接近的匹配。它将首先匹配到“Hi”。如果找不到,则匹配“hi”然后是“Hiya”,以此类推。优先考虑完全匹配,然后是大小写匹配,最后是具有最少差异或长度差异的那个。

我的当前方法似乎不太灵活,首先检查完美匹配,然后使用string.match循环,在其中保存任何具有最接近的string.len的字符串。

点赞
用户2858170
用户2858170

如果你不仅仅在寻找完美的匹配,你需要使用一些指标来衡量相似度,然后寻找最接近的匹配。

像 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 指标,Kullback–Leibler 分歧的近似

Fellegi 和 Sunters 指标 (SFS)

最大匹配

基于语法的距离

TFIDF 距离度量

2017-12-11 09:18:29