【问题标题】:Probabalistic String Matching in PythonPython中的概率字符串匹配
【发布时间】:2013-06-26 11:16:09
【问题描述】:

我正在编写一个机器人,使用他们的Python API 在Betfair 网站上下注。我想在正在进行的足球(足球)比赛中下注。

我编写了一个 XML 提要来提供来自比赛的实时数据,但是 XML 提要并不总是使用与必发相同的足球队名称。

例如,当提及曼联时,Betfair 可能使用“Man Utd”,而 XML 提要可能使用“Man United”或其他一些变体。我并不局限于流行的市场,所以建立一个标准的必发到 XML 名称转换表是不可行的。

我正在尝试使用某种概率字符串匹配来指示两个数据源指的是同一个团队。

到目前为止,我玩过 Reverend,它似乎做了一些贝叶斯计算,但是我认为我没有正确使用它,因为我必须将字符串分解为 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]。如果有任何想法或改进,我将不胜感激。

编辑:我有另一个想法,我想要它在 Betfair 和 feed 上是相同匹配的概率。但这给了我第一个名字匹配和第二个名字匹配的概率。我需要找到第一个和第二个名字匹配的概率。因此,我编写了以下函数,这似乎给了我更合理的结果:

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

对于不同方法的任何建议或现有库的建议,我仍将不胜感激,或者对纠正我的概率计算的提示。

【问题讨论】:

  • 我从来没有正确解决它,我发现最好的解决方案是使用我在编辑中输入的内容。现在我会尝试一些事情,可能是比较两个字符串的 soundex 编码,或者可能是使用 LSTM 或其他东西的循环神经网络。

标签: python algorithm artificial-intelligence probability string-matching


【解决方案1】:

这是我的建议。阅读http://norvig.com/spell-correct.html,在此基础上实现一些东西,看看它的效果如何。希望它会运作良好。

通过动态缓存结果来加速它,这样一旦它猜出了给定名称的猜测,它就会重新使用猜测。

您的实现应该有一份关于最可疑猜测的异常报告,以便您可以手动查看并拒绝或修复它们。

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2021-08-25
    • 2013-08-10
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多