搜索比较前缀的最佳匹配
Posted
技术标签:
【中文标题】搜索比较前缀的最佳匹配【英文标题】:Search the best match comparing prefixes 【发布时间】:2021-05-18 20:50:11 【问题描述】:我有numbers codes
和text codes
,如下面的table1
。我有numbers to search
就像table2
为此,我希望从左到右比较 prefix of minimun length of 3
的最佳匹配,并将对应的 TEXT CODE
显示为答案。
我展示了一些 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”)会变得有点困难,因为这可能不会出错。有几种不同的模糊匹配方法可以使用,在这种情况下可能会更好。 谢谢。我用几种可能性测试了这种模糊匹配,当我使用实际输入数据时,在许多情况下并没有给出我需要的预期答案。因为我的问题是关于基于前缀的匹配,而这种模糊方法在任何位置看起来都是字符串。还是谢谢以上是关于搜索比较前缀的最佳匹配的主要内容,如果未能解决你的问题,请参考以下文章
比较 SQL 表行,如果完全匹配、1 个差异、2 个差异等返回不同的答案