5

如果地址匹配,我必须比较两个表中的地址并获取 Id。每个表都有三列 Houseno、street、state 地址在任何一个表中都不是标准格式。大约有。50,000 行,我需要扫描

在某些地方,它是 Ave. Avenue Ave。STR街,ST。车道 Ln。放置 PL Cir CIRCLE。与点或逗号或空格的任何组合,hypen。我正在考虑将这三个结合起来,例如,在 SQL 或 PLSQL 中最好的方法是什么

表格1

     HNO         STR          State
     -----       -----         ----- 
      12        6th Ave         NY
      10        3rd Aven        SD
      12-11     Fouth St        NJ                         
      11        sixth Lane      NY
      A23       Main Parkway    NY
      A-21      124 th Str.     VA

表2

      id   HNO         STR          state
     --    -----       -----         ----- 
     1      12        6 Ave.         NY
     13     10        3 Avenue       SD
     15     1121      Fouth Street   NJ                         
     33     23        9th Lane       NY
     24     X23       Main Cir.      NY
     34     A1       124th Street    VA
4

4 回答 4

1

Oracle 有一个内置的 UTL_Match 包,它有一个 edit_distance 函数(基于 Levenshtein 算法,这是衡量您需要进行多少更改才能使一个字符串与另一个字符串相同)。关于这个包/功能的更多信息可以在这里找到:http: //docs.oracle.com/cd/E18283_01/appdev.112/e16760/u_match.htm

您需要就是否比较每一列或连接然后比较以及合理的阈值是多少做出一些决定。例如,您可能希望对任何编辑距离小于 8 的串联值进行手动检查。

如果您需要语法方面的任何帮助,请告诉我,edit_distance 函数只需要 2 个 varchar2 args(您要比较的字符串)并返回一个数字。

这不是一个完美的解决方案,因为如果您将阈值设置得较高,您将需要进行大量手动检查以丢弃一些匹配项,如果您将其设置得太低,您会错过一些匹配项,但如果您将其设置为最好的想要一个相对简单的解决方案。

于 2013-06-23T16:57:46.347 回答
1

没有简单的方法可以实现您想要的。有一个昂贵的软件(谷歌“地址标准化软件”)可以做到这一点,但很少 100% 自动。

这种类型的软件所做的是获取数据,使用复杂的启发式方法来尝试找出“官方”地址,然后返回该地址(有时相信结果是正确的,有时是按置信度排序的结果列表)。

对于一小部分数据,该软件根本无法工作,您必须自己修复。

于 2013-03-05T15:44:17.963 回答
1

我们为我们的一个应用程序执行此操作的方法是使用第三方地址规范化 API(例如:Pitney Bowes),规范化每个地址(地址是街道地址、城市、州和邮政编码的组合)并创建一个 T-sql该地址的哈希值。对于要比较的地址做同样的事情并比较两个哈希值,如果它们匹配,我们就有一个匹配

于 2016-02-11T03:04:50.133 回答
0

您可以将光标放在您首先按门牌号和城市 = 进行分组的位置。

考虑到 chr(32),您可以在循环中使用 instr e substr 分隔一行。

之后,您可以尝试考虑与子字符串进行对抗,其中您有一个数字 6 = 6th ,其他情况下是 street = str。

祝你好运!

于 2013-03-05T16:17:08.143 回答