数据匹配算法

我目前正在从事一个需要实施数据匹配算法的项目。外部系统传入它了解的有关客户的所有数据,而我设计的系统必须返回匹配的客户。这样,外部系统便会知道客户的正确ID,并获得其他数据,或者可以更新特定客户自己的数据。

传入以下字段:

  • 名称
  • 名称2
  • 邮政编码
  • 银行帐号
  • 银行名称
  • 银行代码
  • 电子邮件
  • 电话
  • 传真
  • 网页

数据可以是高质量的,并且可以使用很多信息,但是通常数据很糟糕,只有名称和地址可用并且可能有拼写。

我正在.Net中实施该项目。我目前正在做的事情如下:

public bool IsMatch(Customer customer)

{

// CanIdentify just checks if the info is provided and has a specific length (e.g. > 1)

if (CanIdentifyByStreet() && CanIdentifyByBankAccountNumber())

{

// some parsing of strings done before (substring, etc.)

if(Street == customer.Street && AccountNumber == customer.BankAccountNumber) return true;

}

if (CanIdentifyByStreet() && CanIdentifyByZipCode() &&CanIdentifyByName())

{

...

}

}

我对上述方法不太满意。这是因为我必须为所有合理的情况(组合)编写if语句,这样我才不会错过匹配实体的任何机会。

所以我想也许我可以创造某种匹配分数。因此,对于每个匹配的标准,将添加一个分数。喜欢:

public bool IsMatch(Customer customer)

{

int matchingScore = 0;

if (CanIdentifyByStreet())

{

if(....)

matchingScore += 10;

}

if (CanIdentifyByName())

{

if(....)

matchingScore += 10;

}

if (CanIdentifyBankAccountNumber())

{

if(....)

matchingScore += 10;

}

if(matchingScore > iDontKnow)

return true;

}

这将使我能够考虑所有匹配数据,并且根据某些权重,我将增加匹配分数。如果分数足够高,那就是一场比赛。

知道我的问题是:是否存在针对此类事情的最佳实践,例如匹配算法模式等?非常感谢!

回答:

为了获得启发,请看Levenshtein距离算法。这将为您提供合理的机制来加权比较。

我还要补充一点,以我的经验,您绝对不能绝对将两个任意数据匹配到同一实体中。您需要向用户提供合理的匹配条件,然后用户才能确定1920 E.

Pine上的John Smith是否与East Pine Road 192上的Jon Smith是同一个人。

以上是 数据匹配算法 的全部内容, 来源链接: utcz.com/qa/423458.html

回到顶部