Ответ 1
Здесь что-то много надежное даже для произвольного ввода пользователем, я думаю. Во-первых, сопоставьте каждую команду (я использую трехбуквенный код как каноническое имя для каждой команды) в полностью прописанную версию с именем города и команды, а также любые прозвища в круглых скобках между городом и именем команды.
Scan[(fullname[[email protected]#] = #[[2]])&, {
{"ari", "Arizona Cardinals"}, {"atl", "Atlanta Falcons"},
{"bal", "Baltimore Ravens"}, {"buf", "Buffalo Bills"},
{"car", "Carolina Panthers"}, {"chi", "Chicago Bears"},
{"cin", "Cincinnati Bengals"}, {"clv", "Cleveland Browns"},
{"dal", "Dallas Cowboys"}, {"den", "Denver Broncos"},
{"det", "Detroit Lions"}, {"gbp", "Green Bay Packers"},
{"hou", "Houston Texans"}, {"ind", "Indianapolis Colts"},
{"jac", "Jacksonville Jaguars"}, {"kan", "Kansas City Chiefs"},
{"mia", "Miami Dolphins"}, {"min", "Minnesota Vikings"},
{"nep", "New England Patriots"}, {"nos", "New Orleans Saints"},
{"nyg", "New York Giants NYG"}, {"nyj", "New York Jets NYJ"},
{"oak", "Oakland Raiders"}, {"phl", "Philadelphia Eagles"},
{"pit", "Pittsburgh Steelers"}, {"sdc", "San Diego Chargers"},
{"sff", "San Francisco 49ers forty-niners"}, {"sea", "Seattle Seahawks"},
{"stl", "St Louis Rams"}, {"tam", "Tampa Bay Buccaneers"},
{"ten", "Tennessee Titans"}, {"wsh", "Washington Redskins"}}]
Затем для любой заданной строки найдите самую длинную общую подпоследовательность для каждого из полных имен команд. Чтобы отдать предпочтение сопоставлениям строк в начале или в конце (например, "автомобиль" должен соответствовать "пантерам каролины", а не "кардиналам из аризоны" ) сэндвич как входной строки, так и полных имен между пробелами. В зависимости от того, какое полное имя команды имеет [sic:] самая длинная длинная общая подпоследовательность с входной строкой, мы возвращаем команду. Здесь реализация алгоритма Mathematica:
teams = [email protected];
(* argMax[f, domain] returns the element of domain for which f of that element is
maximal -- breaks ties in favor of first occurrence. *)
SetAttributes[argMax, HoldFirst];
argMax[f_, dom_List] := Fold[If[f[#1] >= f[#2], #1, #2] &, [email protected], [email protected]]
canonicalize[s_] := argMax[[email protected][" "<>s<>" ",
" "<>[email protected]#<>" ", IgnoreCase->True]&, teams]