我如何在数据库中找到重复的地址,或者最好在填写表单时阻止人们?我想越早越好?
有没有什么好的方法来提取街道,邮政编码等,这样就可以检测到打字错误和简单的获取2注册的尝试?像这样:
Quellenstrasse 66/11
Quellenstr. 66a-11我说的是德国地址..。谢谢!
发布于 2008-09-01 09:05:25
Johannes:
@PConroy:这也是我最初的想法。其中有趣的部分是为地址的不同部分找到好的转换规则!有什么好的建议吗?
当我们之前在这类项目上工作时,我们的方法是利用现有的地址语料库(150k左右),然后对我们的域名应用最常见的转换(爱尔兰,所以"Dr"->"Drive","Rd"->"Road“等)。恐怕当时没有关于这类事情的全面的在线资源,所以我们基本上自己做了一个列表,检查电话簿之类的东西(在那里按下空间,地址以各种方式缩写!)。正如我前面提到的,您将会惊讶地发现,只需添加几个常见规则,就可以检测到多少“重复项”!
我最近偶然发现了一个页面,里面有一个相当全面的list of address abbreviations,尽管它是美国英语,所以我不确定它在德国有多有用!谷歌很快就找到了几个网站,但它们看起来像是垃圾新闻通讯的注册陷阱。虽然那是我用英语搜索的,所以你可能会更多地看看德语中的“德语地址缩写”:)
发布于 2008-09-01 07:58:59
您可以使用Google GeoCode API
这实际上给出了你的两个例子的结果,只是尝试一下。这样,您就可以获得结构化的结果,并将其保存在数据库中。如果查找失败,请要求用户以另一种方式写入地址。
发布于 2008-09-01 07:52:43
越早阻止人们,从长远来看就越容易!
由于不太熟悉您的数据库模式或数据输入表单,我建议使用下面这样的方法:
上面的理由是,每个部分都可能有自己的特殊“规则”,用于检查略微更改的地址("Quellenstrasse"->"Quellenstr.","66/11"->"66a-11“),因此您的验证代码可以检查每个字段的值是否存在于其各自的db字段中。如果没有,您可以让一个类对每个给定字段应用转换规则(例如,将"strasse“词根转换为"str"),并再次检查重复项。
显然,上面的方法有它的缺点:
一旦你有了基本的检查,你就可以考虑优化所需的数据库访问,完善规则等,以满足你的特定模式。您还可以查看MySQL's match() function来处理类似的文本。
https://stackoverflow.com/questions/37568
复制相似问题