3

对照我们的 SQL 数据库地址列表检查客户地址,判断该地址是否存在于我们的数据库中。客户地址有不同的格式。

e.g:- 8455 W 23RD st OFFICE 4
     8455 WEST 23RD st OFC 4
     8455 WEST TWENTY-THIRD street OFC 4

如果我做字符串比较,我会得到bExist = False;

注意:- 我使用的是 C#,应用程序运行的服务器没有互联网连接。附加例如:-

APARTMENT   APT
APARTMENT   APARTMENT
BUILDING    BLDG
BUILDING    BUILDING
DEPARTMENT  DEPT
DEPARTMENT  DEPARTMENT
FLOOR   FL
FLOOR   FLOOR
HANGAR  HNGR
HANGAR  HANGAR
LOT LOT
OFFICE  OFC
OFFICE  OFFICE
PIER    PIER
PIER    PIER
ROOM    RM
ROOM    ROOM
SLIP    SLIP
SPACE   SPC
SPACE   SPACE
STOP    STOP
SUITE   STE
SUITE   SUITE
TRAILER TRLR
TRAILER TRAILER
UNIT    UNIT

N   NORTH
S   SOUTH
E   EAST
W   WEST
NE  NORTHEAST
SE  SOUTHEAST
NW  NORTHWEST
SW  SOUTHWEST
NORTH   NORTH
SOUTH   SOUTH
EAST    EAST
WEST    WEST
NORTHEAST   NORTHEAST
SOUTHEAST   SOUTHEAST
NORTHWEST   NORTHWEST
SOUTHWEST   SOUTHWEST
NORTH EAST  NORTHEAST
SOUTH EAST  SOUTHEAST
NORTH WEST  NORTHWEST
SOUTH WEST  SOUTHWEST
4

3 回答 3

1

您甚至无法在直接 SQL 中取得成功。即使在“普通”编程语言中也很困难。有需要考虑的区域地址样式,以及人们想出的许多地址变体,例如

  • 主街 123 号,公寓 3A,...
  • 主街 123 号 #3,...
  • 123 Main St Box 3 ...

所有这些都反映了相同的物理地址。

这甚至没有考虑简单的数据输入错误,例如转置字符。

事情很快变得非常困难。您将花费大量的时间和精力来处理某人犯下的下一个创造性数据输入错误。

您要做的是在您的数据库中记录地址之前使用美国邮局的地址标准化服务。也有不少第三方供应商获得了 USPS 的准确性认证。

我在一家初创公司工作了一段时间,该公司使用 Google Maps API 来标准化地址——另一种方法。

于 2013-06-13T23:49:37.580 回答
1

有很多选项,如果你有 SSIS,你可以使用它们内置的模糊匹配,这已经足够了。

我使用了来自 Ambient Concepts 的工具:地址解析器 它是一组函数,可以解析和标准化您的地址。他们似乎提供免费试用,因此您可以对其进行测试。

您也可以从头开始,尽可能地同质化数据。我们经常将街道号码和街道名称分开,因为绝大多数差异来自前/后方向,即:12 north 5th st、12 n 5th st、12 5th st north 等。以及数字与数字词.

于 2013-06-13T22:14:05.797 回答
0

我会选择类似...

  public static string Substitute(string s)
            {
                var abbrevs = new Dictionary<string, string>();
                abbrevs.Add("OFC", "OFFICE");
                abbrevs.Add("ST", "STREET");
                abbrevs.Add("ST.", "STREET");
                if (abbrevs.ContainsKey(s)) return abbrevs[s];
                return SubstituteWordNumbersForNumerics(s);            
            }

            public static string ToNormalAddressFormat(string address)
            {
                return address.Split(' ').ToList().Select(Substitute).Aggregate((x, y) => x + " " + y);
            }

然后在比较之前转换所有地址

于 2013-06-13T22:23:45.683 回答