【发布时间】:2020-03-11 06:26:01
【问题描述】:
给定一个list 的扑克翻牌和一个str 作为目标:
target = '5c6d2d'
flops = ['5s4d3s', '6s4d2d', '6s5d3s', '6s4s2d']
我正在尝试找到与目标最接近的匹配项。当前使用fuzzywuzzy.process.extract,但有时这不会返回所需的匹配项。而且(更重要的是)它没有正确考虑排名,因为面卡的排名是用字母表示的,所以9c9d9s 也更类似于2c2d2h,而不是TcTdTh。有没有一种巧妙的方法来解析target flop 以使用简单的算法来做到这一点?或者最好尝试为此训练一个机器学习模型?
如果相关的话,请注意:我的fuzzywuzzy 使用纯 python SequenceMatcher,因为我没有权限为 python-Levenshtein 安装 Visual Studio 14。
编辑:澄清一下,最接近的匹配是指翻牌纹理方面最接近的,即战略上最相似的翻牌(我知道这有点困难)。我最初给出的示例列表实际上并不太清楚,所以这里再举一个 fuzzywuzzy 的示例:
>>> target = '8c8h5s'
>>> flops = ['2d2s6c', '7c5s5d', '8s8d7h', '4h3s3d']
>>> matches = process.extract(target, flops)
>>> print(matches)
[('7c5s5d', 50), ('8s8d7h', 50), ('4h3s3d', 33), ('2d2s6c', 17)]
就我而言,'8s8d7h' 的得分应该比'7c5s5d' 好。所以军衔的匹配要优先于花色的匹配。
【问题讨论】:
标签: python python-3.x fuzzy-search fuzzywuzzy