Вероятностное сопоставление строк в Python

Я в процессе написания бота, который ставит ставки на сайте Betfair, используя их API Python . Я хочу делать ставки на футбольные матчи, когда они играют в игру.

Я закодировал XML-канал, чтобы предоставить мне живые данные из игр, однако XML-фид не всегда использует одно и то же имя для футбольных команд, как использование Betfair.

Например, когда речь идет о Манчестер Юнайтед Бетфейр, можно использовать «Манчестер Юнайтед», в то время как XML-канал может использовать «Манчестер Юнайтед» или какой-то другой вариант. Я не ограничиваюсь популярными рынками, поэтому создание стандартной таблицы преобразования имен Betfair в XML не представляется возможным.

Я пытаюсь использовать какое-то вероятностное сопоставление строк, чтобы дать мне указание, что два источника данных относятся к тем же командам.

До сих пор я играл с Преподобным, который, кажется, делает байесовские вычисления, однако я не думаю, что я использую его должным образом, поскольку я должен разбить строку на персонажей, чтобы train guesser . Затем я просто усредняю ​​вероятность того, что каждая буква связана с каждым именем, я знаю, что это математически неверно, но я думал, что это может быть выполнимый эвристический тест.

Вот мой код:

 import scorefeed from reverend.thomas import Bayes guesser = Bayes() teams=['home','away'] def train(team_no, name): for char in name: guesser.train(teams[team_no], char) def untrain(team_no, name): for char in name: guesser.untrain(teams[team_no], char) def guess(name): home_guess = 0.0 away_guess = 0.0 for char in name: if len(guesser.guess(char)) > 0: for guess in guesser.guess(char): if guess[0] == teams[0]: home_guess = home_guess + guess[1] print home_guess if guess[0] == teams[1]: away_guess = away_guess + guess[1] print away_guess home_guess = home_guess / float(len(name)) away_guess = away_guess / float(len(name)) probs = [home_guess, away_guess] return probs def game_match(betfair_game_string, feed_home, feed_away): home_team = betfair_game_string[0:betfair_game_string.find(' V ')] away_team = betfair_game_string[betfair_game_string.find('V')+2:len(betfair_game_string)] train(0, home_team) train(1, away_team) probs = [] probs.append(guess(feed_home)[0]) probs.append(guess(feed_away)[1]) untrain(0, home_team) untrain(1, away_team) return probs print game_match("Man Utd V Lpool", "Manchester United", "Liverpool") 

Вероятность, полученная с текущей настройкой, равна [0.4705411764705883, 0.5555] . Я был бы очень благодарен за любые идеи или улучшения.

EDIT: У меня была другая мысль, я хочу, чтобы вероятность того, что она совпадает с Betfair и фидом. Но это дает мне вероятность совпадения первого имени и совпадения второго имени. Мне нужно найти вероятность совпадения первых И-вторых имен. Поэтому я закодировал следующую функцию, которая, как представляется, дает мне более разумные результаты:

 def prob_match(probs): prob_not_home = 1.0 - probs[0] prob_not_away = 1.0 - probs[1] prob_not_home_and_away = prob_not_home*prob_not_away prob_home_and_away = 1.0 - prob_not_home_and_away return prob_home_and_away 

Я бы по достоинству оценил любые предложения по различным методам или рекомендациям существующих библиотек, которые делают то же самое, или советы по исправлению моих вероятностных вычислений.

    One Solution collect form web for “Вероятностное сопоставление строк в Python”

    Вот мой совет. Прочитайте http://norvig.com/spell-correct.html , реализуйте что-то на этом основании и посмотрите, насколько хорошо он работает. Надеюсь, он будет работать достаточно хорошо.

    Ускорьте это путем кеширования результатов «на лету», чтобы как только он вычислил догадки для данного имени, он просто повторяет предположение.

    У вашей реализации должен быть отчет об исключениях из самых сомнительных догадок, чтобы вы могли вручную просмотреть и либо отклонить, либо исправить их.

     
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.