【发布时间】:2011-03-13 04:38:14
【问题描述】:
我在 SQL Server 2008 中有 Persons 表。
我的目标是找到地址几乎相似的人。
地址用state、town、street、house、apartment、postcode和phone列描述。
由于某些州(不是美国)和人为因素(地址错误等)的某些特定差异,地址没有以相同的模式填写。
地址中最常见的错误
- 区分大小写
- 有人写了“apt.”,另一个人写了“apartment”或“ap”。 (虽然地址不是用英文写的)
- 空格、点、逗号
- 街道名称的书写差异,例如“Dr. Jones str.”或“Doctor Jones street”或“D.乔恩。 st.”或“Dr Jones st”等。
主要问题是数据的模式不同,因此很难找到相似的地址。
这种问题有什么算法吗?
提前致谢。
更新
- 正如我提到的,地址被分成不同的列。我应该生成一个连接列的字符串还是为每列执行您的步骤? 我假设我不应该连接列,但是如果我要分别比较列,我应该如何组织它?我是否应该为每列找到相似之处,将它们合并或相交或其他任何内容?
- 我应该收集一些统计数据还是某种教育算法?
【问题讨论】:
-
我不知道这样的算法。您可以使用输入验证,至少在街道上输入正确的地址。如果您有一个单独的街道输入字段,您可以避免来自用户的“街道”之类的词,并从程序内部附加它。我不知道,但希望这会对你有所帮助。
-
关于验证之类的东西你当然是对的,但是已经输入了大量的数据,我需要一个搜索算法。
-
这真的取决于你想要完成什么。您是否有一个用户,输入姓名和地址,然后您将向他显示所有相似的地址以让他手动选择一个,或者您是否要将具有相似地址的所有人员自动分组在一起?
-
我只是在给一个机会,看看他输入一个人的地址时是否有类似地址的人。如果该算法可以正常工作,它还可以用于自动建议正确的街道名称或其他任何内容,但这不是我目前的目标。
-
我不确定您是否已经解释了您要解决的确切问题。除非有根本原因,否则“地址几乎相似”的人似乎并不是特别有用。重新考虑为什么要尝试获取此信息可能会导致一种完全不同的方法,这种方法可以证明要简单得多。例如,如果您想避免同居的人重复的群发邮件目的地:您可以从按姓氏对地址进行分组开始;那么更粗略和基本的地址比较技术可能就足够了。 另外,我怀疑 SQL 是否是正确的工具。 ;)
标签: sql sql-server algorithm string-comparison