Python 3.x 通过比较前缀来搜索最佳匹配
我有Python 3.x 通过比较前缀来搜索最佳匹配,python-3.x,string-matching,prefix,Python 3.x,String Matching,Prefix,我有数字代码和文本代码,如下面的表1所示。我有要搜索的数字如表2所示 为此,我希望从左到右比较最小长度为3的前缀的最佳匹配,并将相应的文本代码显示为答案 如果有确切的匹配,那就是答案 若并没有任何至少有3个长度前缀的值,那个么答案将是“找不到” 我在表2旁边展示了一些注释,解释了每个要搜索的编号所需的答案中应用的条件。 我当前的尝试显示了精确匹配,但我不确定在没有精确匹配的情况下如何比较这些值以搜索其他条件 ncode = ["88271","1893&quo
数字代码
和文本代码
,如下面的表1所示。我有要搜索的数字
如表2所示
为此,我希望从左到右比较最小长度为3的前缀的最佳匹配,并将相应的文本代码显示为答案
- 如果有确切的匹配,那就是答案
- 若并没有任何至少有3个长度前缀的值,那个么答案将是“找不到”
我在表2旁边展示了一些注释,解释了每个要搜索的编号所需的答案中应用的条件。
我当前的尝试显示了精确匹配,但我不确定在没有精确匹配的情况下如何比较这些值以搜索其他条件
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' ]
]
一个简单的解决方案可能是模糊匹配库。它比较字符串并计算相似性分数。它确实是字符串而不是数字的亮点,但它可以很容易地应用于在前缀数字中找到类似的结果
退房
这是一篇写得很好的文章。感谢分享信息。这似乎是我想做的一件事。使用这个,我需要知道什么百分比的匹配将是好的选择。超过0.5,超过0.65等等@GerCas,我想只需要一点尝试和错误,就可以拨出你满意的错误百分比。我希望准确率达到80%左右就好了。这将允许一个五位数的数字被一个位数关闭,并且仍然出现在结果中。使用像“404”这样的较短数字会变得更困难,因为这可能不允许出现错误。有几种不同的模糊匹配方法可以使用,在这种情况下可能会更好。谢谢。我用几种可能性测试了模糊匹配,但在许多情况下,当我使用实际输入数据时,并没有给出我需要的预期答案。因为我的问题是关于基于前缀的匹配,这个模糊方法在任何位置都可以看到字符串。无论如何谢谢你