我们正在清理和分析大量人工输入的客户数据。我们需要以编程方式确定 2 个地址(例如)是否相同,即使输入的数据略有不同。
现在我们通过相当简单的字符串替换来运行每个地址(例如,用 ave 替换 avenue),连接字段并比较结果。我们正在对名称做类似的事情。
至少,看起来我们的搜索替换值列表应该已经存在于某个地方。
或者,也许您可以提出一种完全不同且更优越的方法来检测匹配项?
对于地址,您应该通过 google 的 map api 运行它们并为每个地址获取一个地理编码。然后,如果地理编码相同,则地点相同。我相信他们允许 10k hits/day/ip 免费。
你不可能自己想出更好的东西。
Soundex及其变体可能是一个好的开始,就像该 Wikipedia 页面建议的其他方法一样。
在工作中,我帮助编写验证地址的软件(用于 SmartyStreets)。
地址验证是一项非常棘手的操作——事实上,USPS 已经指定了某些经过认证的公司来提供这项服务。我不建议(即使我站在你的立场)你自己尝试这个。如前所述,谷歌做了一些地址解析,但只是近似地址。谷歌和雅虎及类似服务不会验证地址数据的准确性。
所以你需要一个经过CASS认证的方法来解决这个问题。我建议使用LiveAddress API(用于入口点验证)或Certified Scrubbing(用于现有地址列表或数据库)之类的东西。两者都通过了 USPS 的 CASS 认证,可以满足您的要求。
本质上,您是在尝试找出两个字符串的相似程度,并且有很多不同的方法可以测量它。骰子系数可以很好地用于您正在做的事情,尽管它的操作成本有点高。
http://en.wikipedia.org/wiki/Dice_coefficient
如果您想要更全面的字符串相似性度量列表,请尝试此处: http ://www.dcs.shef.ac.uk/~sam/stringmetrics.html