【问题标题】: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'   ]
      ] 

【问题讨论】:

    标签: python-3.x string-matching prefix


    【解决方案1】:

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

    查看fuzzy-match here

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

    【讨论】:

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