将地址与地址列表进行比较

本文关键字:地址 比较 列表 | 更新日期: 2023-09-27 18:18:23

根据SQL DB地址列表检查客户地址,以告知地址是否存在于数据库中。客户地址格式不同

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

将地址与地址列表进行比较

有很多选择,如果你有SSIS,你可以使用他们内置的模糊匹配,这是相当足够的。

我使用了一个来自Ambient Concepts的工具:地址解析器它是一个函数集合,将解析和标准化您的地址。他们似乎提供免费试用,所以你可以测试一下。

您也可以从头开始,尽可能地均匀化数据。我们经常把街道号码和街道名称分开,因为绝大多数的差异来自于前后的方向,例如:北12 5th st,南12 5th st,北12 5th st等。还有数字和数字词。

你甚至不能在直接SQL中接近成功。即使在"正常"的编程语言中也很难做到。需要考虑区域寻址风格,以及人们想出的许多地址变体,例如

  • 123 Main St, Apt 3A,…
  • 123主街3号,…
  • 123主St盒3…

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

这还没有考虑到简单的数据输入错误,比如字符调换。

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

您要做的是在将地址记录在数据库中之前使用美国邮局的地址标准化服务。也有相当多的第三方供应商,USPS已认证的准确性。

我曾在一家初创公司工作过一段时间,该公司使用谷歌地图API来标准化地址—另一种方法。

我会选择…

  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);
            }

在比较

之前转换所有地址