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

Программы на Python
Anonymous
Вероятностное сопоставление строк в Python

Сообщение Anonymous »

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

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

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

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

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

Вот мой код:

Код: Выделить всё

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]. Буду очень благодарен за любые идеи и улучшения.

РЕДАКТИРОВАТЬ: У меня была еще одна мысль: мне нужна вероятность того, что это один и тот же матч на 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
Я буду признателен за любые предложения по различным методам или рекомендации существующих библиотек, которые делают то же самое, или советы по исправлению моих расчетов вероятности.

Подробнее здесь: https://stackoverflow.com/questions/173 ... -in-python

Вернуться в «Python»