在数据库中找到重复的地址,阻止用户尽早输入?

时间:2020-03-05 18:45:52  来源:igfitidea点击:

如何在数据库中查找重复的地址,或者在填写表单时更好地阻止人们访问?我猜越早越好?

有没有什么好方法可以提取街道,邮政编码等,以便可以检测到拼写错误和获得2个注册的简单尝试?喜欢:

Quellenstrasse 66/11 
Quellenstr. 66a-11

我说的是德国地址...
谢谢!

解决方案

回答

通常,我们在数据库中使用约束来确保数据在基于数据的意义上是"唯一的"。

关于"同构",我认为我们是一个人,即自己编写代码。如果在数据库中,则可以使用触发器。

回答

我们可以越早阻止人员,从长远来看就越容易!

不太熟悉数据库模式或者数据输入表单,我建议使用类似以下的路由:

  • 在数据库中,每个地址"部分"都有不同的字段,例如街道,城市,邮政编码,联邦等。
  • 将数据输入表单类似地细分,例如街道,城市等

上面的原因是,每个部分可能都有自己的特定"规则"来检查略有变化的地址(上面的" Quellenstrasse"->" Quellenstr。"," 66/11"->" 66a-11")因此,验证代码可以检查为每个字段显示的值是否在各自的db字段中。如果不是,我们可以拥有一个类,该类将转换规则应用于每个给定字段(例如," strasse"的词根改为" str"),然后再次检查是否存在重复项。

显然,上述方法有其缺点:

  • 可能会很慢,具体取决于数据集,从而使用户等待
  • 用户可能会尝试通过在错误的字段中输入地址" Parts"来解决该问题(将邮政编码添加到城市等)。但是从经验中我们发现,即使采用上述简单的检查方法,也会阻止大部分用户输入预先存在的地址。

完成基本检查后,我们可以查看优化所需的数据库访问,完善规则等以符合特定模式。我们也可以看看MySQL的match()函数来计算相似的文本。

回答

我们可以使用Google GeoCode API

实际上,Wich只是为两个示例提供了结果。这样,我们可以获得可以保存在数据库中的结构化结果。如果查找失败,请要求用户以其他方式写入地址。

回答

在数据库中搜索重复的地址之前,首先应确保以标准格式存储地址。

大多数国家/地区都采用标准的地址格式设置方法,在美国则是USPS CASS系统:http://www.usps.com/ncsc/addressservices/certprograms/cass.htm

但是大多数其他国家/地区也有类似的服务/标准。请尝试此网站以获取更多国际格式:
http://bitboost.com/ref/international-address-formats.html

这不仅有助于查找重复项,还可以在向客户发送邮件时为我们省钱(如果地址采用标准格式,则邮政服务的费用会降低)。

根据应用程序,在某些情况下,我们可能希望存储"虚荣"地址记录以及标准地址记录。这使VIP客户满意。 "虚荣"地址可能类似于:

西九十第一街62号
4D公寓
纽约曼哈顿10001

虽然标准地址可能如下所示:

62 W 91ST ST APT 4D

回答

纽约10024-1414

我们可能要看的一件事是Soundex搜索,这对于拼写错误和收缩非常有用。

回答

Johannes:
  
  
    @PConroy: This was my initial thougt also. the interesting part on this is to find good transformation rules for the different parts of the address! Any good suggestions?

但是,这不是数据库内验证,因此它可能不是我们想要的。

之前我们从事此类项目时,我们的方法是采用现有的地址语料库(约150k),然后对我们的域应用最常见的转换(爱尔兰,因此" Dr"->" Drive"," Rd"->" Road"等)。恐怕当时还没有关于这些事情的综合在线资源,因此我们最终基本上自己列出了清单,检查了电话簿之类的内容(按那里的空格,地址以各种方式缩写!)。 )。正如我之前提到的,仅添加一些通用规则,我们会惊讶地发现有多少"重复项"!

回答

我最近偶然发现了一个页面,上面有相当完整的地址缩写列表,尽管它是美式英语,所以我不确定它在德国会有多大用处!一个快速的谷歌打开了几个站点,但它们似乎就像是垃圾邮件的注册陷阱。尽管那是我用英语搜索的内容,所以我们可能会用德语中的"德语地址缩写"来看看更多:)

要为我自己的问题添加答案:

一种不同的处理方式是询问用户他们的手机号码,向他们发送短信msg进行验证。这可以防止大多数人弄乱重复的地址。

回答

我说的是个人经验。 (感谢猪背!)他们通过手机介绍了确认信息。那使我失去了2个帐户! :-)

另一个可能的解决方案(假设我们实际上需要可靠的地址数据,而不仅仅是使用地址来防止帐户重复),是使用第三方Web服务来标准化用户提供的地址。

它以这种方式工作-系统通过在线表格接受用户的地址。表单将用户的地址移交给第三方地址标准化Web服务。 Web服务为我们提供了相同的地址,但是现在将数据标准化为离散的地址字段,并应用了标准的缩写和格式。应用程序会在尝试将数据保存到数据库之前,向用户显示此标准化地址,以供用户确认。

如果所有用户地址都经过一个标准化步骤,并且只有标准化地址被保存到数据库中,那么查找重复记录应该大大简化,因为我们现在正在比较多个苹果。

此类第三方服务之一就是Global Address的交互式服务,该服务将德国列入受支持的国家/地区,并且还具有一个在线演示,以演示其服务的工作方式(可在该网页上找到演示链接)。

  • 我们无需创建和维护自己的地址标准化元数据
  • 我们将不需要不断增强地址标准化程序,并且
  • 我们可以自由地将软件开发精力集中在需求所独有的应用程序部分上

显然,这种方法存在成本劣势。但是,从好的方面来说:

段落数量不匹配