搜索比较前缀的最佳匹配

Posted

技术标签:

【中文标题】搜索比较前缀的最佳匹配【英文标题】:Search the best match comparing prefixes 【发布时间】:2021-05-18 20:50:11 【问题描述】:

我有numbers codestext codes,如下面的table1。我有numbers to search 就像table2 为此,我希望从左到右比较 prefix of minimun length of 3 的最佳匹配,并将对应的 TEXT CODE 显示为答案。

如果有完全匹配,那就是答案。 如果没有任何值具有至少 3 个长度前缀,则答案将是“未找到”。

我展示了一些 cmets,解释了 table2 旁边的每个 Number to search 预期的答案中应用的条件。

我当前的尝试显示完全匹配,但是当没有完全匹配时,我不确定如何比较这些值以搜索其他条件。

ncode = ["88271","1893","107728","4482","3527","71290","404","5081","7129","33751","3","40489","107724"]
tcode = ["RI","NE","JH","XT","LF","NE","RI","XT","QS","XT","YU","WE","RP"]
tosearch = ["50923","712902","404","10772"]

out = []
out.append([])
out.append([])

for code in tosearch:
    for nc in ncode:
        if code == nc:
            indexOfMatched = ncode.index(nc)
            out[0].append(nc)
            out[1].append(tcode[indexOfMatched])

>>> out
[['404'], ['RI']]

预期的输出是

out = [
        ['50923',     '712902', '404', '10772'], 
        ['NOT FOUND', 'NE',     'RI',  'JH'   ]
      ] 

【问题讨论】:

【参考方案1】:

您可能会考虑的一个简单解决方案是模糊匹配库。它比较字符串并计算相似度分数。它确实用字符串而不是数字来发光,但它可以很容易地用于在您的前缀数字中找到类似的结果。

查看fuzzy-match here。

这是一个写得很好的fuzzy-match tutorial。

【讨论】:

感谢分享信息。这似乎是我正在尝试做的一种事情。使用它,我需要知道选择多少匹配百分比。大于 0.5、大于 0.65 等 @GerCas,我认为只需要进行一些试验和错误才能确定您满意的错误百分比。我希望大约 80% 的准确度会很好。这将允许一个五位数的数字偏离一位数,并且仍然出现在结果中。使用较短的数字(例如“404”)会变得有点困难,因为这可能不会出错。有几种不同的模糊匹配方法可以使用,在这种情况下可能会更好。 谢谢。我用几种可能性测试了这种模糊匹配,当我使用实际输入数据时,在许多情况下并没有给出我需要的预期答案。因为我的问题是关于基于前缀的匹配,而这种模糊方法在任何位置看起来都是字符串。还是谢谢

以上是关于搜索比较前缀的最佳匹配的主要内容,如果未能解决你的问题,请参考以下文章

Lucene:跨查询比较结果

比较 SQL 表行,如果完全匹配、1 个差异、2 个差异等返回不同的答案

在多个多边形中搜索点的最佳方法

KMP算法

在 Mysql 5.0 中使用具有不同**组合**的键匹配/比较数据库字段

前缀最佳匹配 MySQL