【发布时间】:2011-02-21 23:27:30
【问题描述】:
我正在开展一项调查计划,在该计划中,人们将在首次填写调查表时获得促销考虑。在很多情况下,我们可以阻止人们欺骗系统并获得他们不应得到的晋升的唯一方法是相互检查街道地址字符串。
我正在考虑使用 levenshtein 距离给我一个数字来衡量相似性,并将低于某个阈值的那些视为重复。
但是,如果有人想玩弄这个系统,他们可以很容易地写成“S 5th St”而不是“South Fifth Street”,levenshtein 会认为这些字符串是非常不同的。所以我想将所有字符串转换为“标准地址形式”,即“South”变成“s”,“Fifth”变成“5th”,等等。
然后我认为这是没有希望的,并且需要付出太多努力才能使其正常运行。是吗?
我正在使用 PHP/MySql,所以我有该系统固有的限制。
【问题讨论】:
-
如果不是“S. 5th St.”怎么办?有人进入“S. 4th St.”?这不能用来玩弄系统(假设您正在邮寄促销材料),但它可能会取消人们居住在一个街区之外的资格。只是一个需要测试的边缘案例。
-
@Bill 这种情况不是问题,因为那样他们就不会收到促销考虑。除非他们与居住在第四街那个房子地址的人勾结,但他们可以共谋的家庭只有这么多。我认为这是自我限制的:)
-
@user15841:不,我的意思是如果这两个人合法地独立注册会怎样?您的算法需要足够聪明,才能看到这两个地址之间的差异,但也必须足够聪明,才能将您提供的原始示例视为相同。
-
你的意思是,如果有人不小心给出了别人的地址?是的,这是个问题,但我看不出系统如何在不对更多游戏开放的情况下解决这个问题(“你确定你指的是第四街吗?我们已经为那个地址准备了一个。想再试一次吗?”)
-
不,我的意思是,如果两个住在非常相似但地址不同的人都注册了,其中一个人可能不会中奖。
标签: algorithm street-address user-data