如何在体育游戏中比较python中类似字符串的列表?

2024-06-25 23:39:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有各种属性的体育游戏词典列表。这些列表中只有一项运动。所以我有一份篮球比赛清单,棒球比赛清单,等等

我想以相同的方式格式化所有的“游戏”值,以便相同的特定体育比赛(例如,斗铁者队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并按比例排序。我们可以看出,这不是一个完美的适合

enter image description here


Tags: 字符串名称游戏列表属性密钥lavs
2条回答

可以使用fuzzy wuzzy库替换字符串。制作一个团队的主列表,然后您可以使用fuzzy-wuzzy包来提取与其他字符串最相似的团队。但它并不完美,因为您需要测试不同的场景,例如'CAR'不会返回Carolina Panthers,它将返回'Arizona Cardinals',并且'LVR'返回了'Los Angels Rams'。因此,你只需要支付,然后可能对于那些少数情况,只需要制定一些逻辑来找回正确的团队

from fuzzywuzzy import process

nfl_teams = ['Arizona Cardinals', 'Atlanta Falcons', 'Carolina Panthers', 'Chicago Bears',
         'Dallas Cowboys', 'Detriot Lions','Green Bay Packers','Los Angeles Rams',
         'Minnesota Vikings','New Orleans Saints','New York Giants', 'Philadelphia Eagles',
         'San Francisco 49ers','Seattle Seahawks','Washington Redskins','Baltimore Ravens',
         'Buffalo Bills','Cinncinnati Bangals','Cleveland Browns','Denver Broncos',
         'Houston Texans','Indanapolis Colts','Jacksonville Jaguars','Kansas City Chiefs',
         'Las Vegas Raiders','Los Angeles Chargers','Miami Dolphins','New England Patriots',
         'New York Jets','Pittsburgh Steelers','Tennessee Titans']

matchups = ['OAK Raiders vs CHI Bears','GB Packers vs MIN Vikings','PIT Steelers vs LA Rams', 'PHI vs DEN']
for each in matchups:
    team1, team2 = each.split('vs')[0].strip(), each.split('vs')[-1].strip()
    team1_alpha = process.extractOne(team1, nfl_teams)[0]
    team2_alpha = process.extractOne(team2, nfl_teams)[0]
    
    print ('%s   ->   %s vs %s' %(each, team1_alpha, team2_alpha))

输出:

OAK Raiders vs CHI Bears   ->   Las Vegas Raiders vs Chicago Bears
GB Packers vs MIN Vikings   ->   Green Bay Packers vs Minnesota Vikings
PIT Steelers vs LA Rams   ->   Pittsburgh Steelers vs Los Angeles Rams
PHI vs DEN   ->   Philadelphia Eagles vs Denver Broncos

或者,如果你想做一个比较,看看他们有多相似

from fuzzywuzzy import fuzz
var1 = "Pittsburgh Steelers vs Los Angeles Rams" 
var2 = "PIT Steelers vs LA Rams"

print(fuzz.ratio(var1, var2))  

print(fuzz.token_sort_ratio(var1, var2))

print(fuzz.token_set_ratio(var1, var2))

输出:

68
71
82

创建一个不包括城市的短团队名称列表,然后扫描标题以查找这些短名称。您应该在每个标题中找到两个简短的团队名称,然后可以使用它们将标题分组为独特的游戏

team_long_names = ['Arizona Cardinals', 'Atlanta Falcons', 'Carolina Panthers', 'Chicago Bears',
         'Dallas Cowboys', 'Detriot Lions','Green Bay Packers','Los Angeles Rams',
         'Minnesota Vikings','New Orleans Saints','New York Giants', 'Philadelphia Eagles',
         'San Francisco 49ers','Seattle Seahawks','Washington Redskins','Baltimore Ravens',
         'Buffalo Bills','Cinncinnati Bangals','Cleveland Browns','Denver Broncos',
         'Houston Texans','Indanapolis Colts','Jacksonville Jaguars','Kansas City Chiefs',
         'Las Vegas Raiders','Los Angeles Chargers','Miami Dolphins','New England Patriots',
         'New York Jets','Pittsburgh Steelers','Tennessee Titans']

team_short_names = [n.lower().split(' ')[-1] for n in team_long_names]

game_titles = ['Atlanta Falcons vs New York Jets', 'ATL Falcons vs NY Jets', 'Falcons v Jets',
            'SF 49ers vs PIT Steelers', 'San Fransico 49ers vs Pittsburg Steelers', '49ers vs Steelers',
            'Dallas Cowboys vs LA Chargers', 'DAL Cowboys vs Los Angles Chargers', 'Cowboys v Chargers',
            'Blah blah Falcons and Foo bar Jets']

titles_by_key = []

for title in game_titles:
    game_key = '-'.join([word for word in title.lower().split(' ') if word in team_short_names])
    titles_by_key.append(game_key + ": " + title)

print(sorted(titles_by_key))

输出:

['49ers-steelers: 49ers vs Steelers',
 '49ers-steelers: SF 49ers vs PIT Steelers',
 '49ers-steelers: San Fransico 49ers vs Pittsburg Steelers',
 'cowboys-chargers: Cowboys v Chargers',
 'cowboys-chargers: DAL Cowboys vs Los Angles Chargers',
 'cowboys-chargers: Dallas Cowboys vs LA Chargers',
 'falcons-jets: ATL Falcons vs NY Jets',
 'falcons-jets: Atlanta Falcons vs New York Jets',
 'falcons-jets: Blah blah Falcons and Foo bar Jets',
 'falcons-jets: Falcons v Jets']

这并不能解决不同联赛中可能出现的球队名称冲突问题,但我怀疑作为预处理步骤,可能有更简单的策略来检测联赛

相关问题 更多 >