Jam*_*mes 7 python algorithm artificial-intelligence probability string-matching
我正在编写一个机器人,使用他们的API 在Betfair网站上下注Python.我想在比赛时投注足球(足球)比赛.
我编写了一个XML feed来为我提供来自游戏的实时数据,但是XML Feed并不总是像Betfair那样使用与橄榄球队相同的名称.
例如,当提到曼联时,Betfair可能使用"Man Utd",而XML feed可能使用"Man United"或其他一些变体.我不仅限于热门市场,因此建立标准的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")
Run Code Online (Sandbox Code Playgroud)
使用当前设置产生的概率是[0.4705411764705883, 0.5555].我真的很感激任何想法或改进.
编辑:我有另一个想法,我想要它与必发和饲料相同的概率.但是这给了我第一个名字匹配的可能性,以及第二个名字匹配的概率.我需要找到第一个和第二个名字匹配的概率.因此我编写了以下函数,这似乎给了我更合理的结果:
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
Run Code Online (Sandbox Code Playgroud)
我仍然会感谢对现有图书馆执行相同操作的不同方法或建议的任何建议,或者有关纠正我的概率计算的提示.
这是我的建议。阅读http://norvig.com/spell- Correct.html ,基于此实现一些内容,看看它的效果如何。希望它能运作良好。
通过动态缓存结果来加速它,这样一旦它猜出了给定名称的猜测,那么它就可以重复使用该猜测。
您的实现应该有一个关于所使用的最可疑猜测的异常报告,以便您可以手动检查并拒绝或修复它们。