Вероятностное сопоставление строк в 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?

    Sqlalchemy.exc.UnboundExecutionError: не удалось найти привязку, настроенную на mapper Mapper | SellsTable | продавцы или этот сеанс

    пустой словарь как значение по умолчанию для аргумента ключевого слова в функции python: словарь, кажется, не инициализируется {} при последующих вызовах?

    gaierror: getaddrinfo не удалось

    Выполнение командной строки в другой папке

    Случайные блуждающие панды

    Что означает этот однострочный Python?

    python многомерный список .. как захватить одно измерение?

    импорт и использование модуля, который использует многопроцессорность, не вызывая бесконечного цикла в Windows

    Сравнение тегов js и template

    Python – Map / Reduce – Как читать конкретное поле JSON при использовании примера count count count

    Обработка дат до 1970 года повторяемым способом в MySQL и Python

    pandas намного медленнее, чем numpy?

    когда итерация списка python является и не является ссылкой

    как я могу освободить соединения mongodb?

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