要根据我们的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
答案 0 :(得分:1)
有很多选项,如果你有SSIS,你可以使用他们内置的模糊匹配,这是非常合适的。
我使用了Ambient Concepts的工具:Address Parser 它是一组函数,可以解析和标准化您的地址。他们似乎提供免费试用,所以你可以测试它。
您也可以从头开始,尽可能均匀化数据。我们经常将街道号码和街道名称分开,因为绝大多数差异来自前/后方向,即:12北5号,12号5号,12号北5号等。以及数字与数字 - 字数。
答案 1 :(得分:1)
你甚至无法在直接SQL中取得成功。即使是在“普通”编程语言中也很难。需要考虑区域寻址方式,以及人们提出的许多地址变体,例如
所有这些都反映了相同的物理地址。
这甚至没有考虑简单的数据输入错误,例如转置字符。
事情很快变得非常困难。你将花费大量的时间和精力来处理下一个创造性数据输入错误。
您要做的是在录制数据库中的地址之前使用US Post Office's address standardization services。 USPS还证明了quite a few 3rd party vendors的准确性。
我曾在一家创业公司工作过一段时间,使用Google Maps API来标准化地址 - 另一种方法。
答案 2 :(得分: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);
}
然后在比较之前转换所有地址