use*_*841 7 algorithm user-data street-address
我正在制定一项调查计划,让人们在第一次填写调查时会获得促销考虑.在很多情况下,我们阻止人们欺骗系统并获得他们不应该得到的促销的唯一方法是检查彼此之间的街道地址字符串.
我正在考虑使用levenshtein距离给我一个数字来衡量相似性,并认为低于某个阈值的数字是重复的.
然而,如果有人想要对系统进行游戏,他们可以轻松地编写"S 5th St"而不是"South Fifth Street",levenshtein会认为这些字符串非常不同.那么我想把所有字符串转换为'标准地址形式',即'South'变成's','Fifth'变成'5th'等等.
然后我认为这是无望的,并且需要付出太多努力才能使其稳健运行.是吗?
我正在使用PHP/MySql,所以我有该系统固有的局限性.
我认为你的第二个想法比使用编辑距离更好。如果您尝试比较地址的相似性,那么居住在附近的两个不同的人可能会意外地“欺骗”彼此的奖金。如果我住在“S. 4th St.” 但我在“南五街”的邻居 已经注册了,这两个地址从 Lev 距离来看可能看起来太相似了。
您可以通过同义词规范化器运行地址来减少(但可能无法消除)许多潜在的作弊行为。在检查相等性之前,只需转换
北 -> 北
东 -> 东
...
第一 -> 第一
第二 -> 第二
第三 -> 第三
...
街道 -> 圣
大道 -> 大道。
你想出的同义词列表越长,就越能更好地捕捉匹配项。处理速度会慢一点,但地址很小。
这类似于在比较字符串之前将它们转换为全部小写(或大写)。(当然,我也推荐这一点。)