【发布时间】:2020-11-21 00:05:07
【问题描述】:
考虑:
string = 'pizza'
matchings = ['pizzas', 'potato chips', 'cheesy lime', 'pretzels', 'pork']
我正在尝试找到一种在列表中找到最佳匹配的好方法。我正在计算:
matchings_indices = {matching:sum([s == m for s,sdx in enumerate(string)\
for m, mdx in enumerate(matching) if sdx<=mdx])/len(string)
for matching in matchings}
matchings_indices
结果:
{'pizzas': 1.0,
'potato chips': 0.6,
'cheesy lime': 0.2,
'pretzels': 0.6,
'pork': 0.4}
简单但足够好!我可以取出最大值,这将是匹配(我只需要一个匹配值,为了清晰起见计算分数)。但是当列表中出现非常相似的字符串时,它真的很困难:
string = 'pizza'
matchings = ['pizzas', 'pizza fries', 'cheesy lime', 'pizzo', 'pizza']
现在我的输出变成:
{'pizzas': 1.0,
'pizza fries': 1.0,
'cheesy lime': 0.2,
'pizzo': 1.0,
'pizza': 1.0}
当然,这里的比萨饼应该有最大索引。我也尝试对它们进行排序:
matchings_indices = {matching:sum([s == m for s,sdx in enumerate(sorted(string))\
for moose in matching.split()
for m, mdx in enumerate(sorted(moose)) if sdx==mdx])/len(string)
for matching in matchings}
但在这种情况下,这是第一种情况的输出:(对于非常不同的字符串仍然足够好)
{'pizzas': 0.8,
'potato chips': 0.0,
'cheesy lime': 0.0,
'pretzels': 0.0,
'pork': 0.2}
这里是第二个:
{'pizzas': 0.8,
'pizza fries': 1.0,
'cheesy lime': 0.2,
'pizzo': 0.6,
'pizza': 1.0}
哪个更好但仍然。 pizzas 比 pizza fries 更匹配,应该得分更高。
所以任何改善情况的帮助都会很棒!
【问题讨论】: