7

我正在編寫一個使用其Python API在網站Betfair上下注的bot程序。我想在比賽中投注足球(足球)比賽。在Python中匹配的字符串

我已經編寫了一個XML feed來爲我提供遊戲中的實時數據,但是XML Feed並不總是像Betfair使用的那樣爲橄欖球隊使用相同的名稱。

例如,當提到曼聯Betfair可能使用「Man Utd」,而XML feed可能使用「Man United」或其他一些變體。我不僅限於流行的市場,因此建立一個標準的必發到XML名稱轉換表是不可行的。

我試圖使用某種概率字符串匹配給我一些跡象表明,兩個數據源指的是相同的團隊。

到目前爲止,我已經與牧師似乎做了一些貝葉斯計算,但我不認爲我正在使用它,因爲我必須將字符串分解成字符trainguesser。然後我簡單地平均每個字母與每個名字關聯的概率,我知道這在數學上是不正確的,但我認爲這可能是一個可行的啓發式測試。

這裏是我的代碼:

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]。我會非常感謝任何想法或改進。

編輯:我有另一個想法,我想它是必發和飼料的相同匹配的概率。但是,這給了我第一個名字匹配的概率,第二個名字匹配。我需要找出第一個和第二個名字匹配的概率。因此,我編寫了下面的函數,這似乎給我更多的合理的結果:

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 

我還是會欣賞不同的方法或做同樣的事情現有庫,或提示的建議,什麼建議在糾正我的概率計算。

+1

你解決了這個問題嗎? – briankip

+0

我從來沒有正確解決它,我發現最好的解決方案是使用我在編輯中的內容。現在有幾件事我會嘗試,比如比較兩個字符串的soundex編碼,或者使用LSTM或其他東西的循環神經網絡。 – James

回答

2

這是我的建議。閱讀http://norvig.com/spell-correct.html,實施基於此的東西,並看看它的工作效果如何。希望它會工作得很好。

通過實時緩存結果加快速度,以便一旦找到給定名稱的猜測,就重新使用猜測。

您的實施應該有一個最可疑猜測的異常報告,以便您可以手動檢查並拒絕或修復它們。