【发布时间】:2020-07-15 14:08:18
【问题描述】:
我有一个包含各种属性的体育游戏词典列表。这些列表都是由列表中的一项运动组成的。所以我有一个篮球比赛列表,棒球比赛列表等等。
我想以相同的方式格式化所有“游戏”值,例如,相同的特定体育比赛(Pit Steelers vs LA Rams)都具有相同的字符串值。特定游戏的示例可以是"PIT Steelers vs LA Rams",但也可以格式化为"Pittsburgh Steelers vs Los Angeles Rams"。对于特定游戏,我的列表中最多可能有 7 个字典,格式略有不同。
我不能选择只使用球队名称或城市,因为在同一项运动中,可能会在 NFL 和 NCAA 等两个不同联赛中与那些特定球队名称或城市进行相同的比赛。
我想我会使用最广泛的游戏名称作为关键。例如,我将使用"Pittsburgh Steelers vs Los Angeles Rams" 而不是"PIT Steelers vs LA Rams" 作为用作基线的键。
有没有办法我可以将这些其他匹配项与密钥进行比较,并说如果密钥中此字符串的百分比超过 X,则用密钥替换此字符串游戏?你会怎么做?我愿意接受所有建议!
谢谢!
编辑:这是使用 difflib 的尝试。我生成了 1000 个随机游戏并导入到 excel 中并按比例排序。我们可以看到它并不完美。
【问题讨论】:
-
您可以尝试拆分“vs”部分并应用 Levenshtein 距离。但它似乎不是很健壮。我认为最好的方法是拥有一本包含所有可能变体的字典:
teams = {"PIT Steelers": ["PIT Steelers", "Pittsburgh Steelers"], "other team": ["variant1", "variant2"]} -
这取决于你如何定义相似。例如,“螃蟹”与“废话”相似吗?
-
因为我是从第三方网站上抓取这些内容,让我拥有一本包含所有可能变体的所有运动的字典几乎是不可能的。
-
我会说,如果在关键的扩展变体中发现了 75% 左右的较小变体字符,我可能会很有信心地说它们是匹配的。
-
这不是一个容易解决的问题 - 您可以尝试为一个团队累积一个包含所有别名的表,将这些别名指向一个选定的键,然后通过别名查找一个团队。桌子的建造要么需要人工干预,要么需要一些复杂的机械......您可以尝试使用您指出的 75% 匹配来缩短复杂性,也许效果很好,很难说。
标签: python string string-comparison