【问题标题】:Find same address with different spelling (Like abbreviation) with sql使用sql查找具有不同拼写(如缩写)的相同地址
【发布时间】:2022-07-06 19:43:31
【问题描述】:

我想找到具有不同拼写/表达(缩写)示例的相同地址,如下所示。但我的查询不起作用。例如 St-->Street(正确)但 Street-->Streetict。 这是代码。

SELECT B_ADDRESS,H_ADDRESS, REGEXP_REPLACE(REGEXP_REPLACE(B_ADDRESS,'S[a-z]r.|(St.)','Street'),'(Dist.)|(Dt.)','Street') as B_NEW,
        REGEXP_REPLACE(REGEXP_REPLACE(H_ADDRESS,'(Str.)|(St.)','Street'), '(Dist.)|(Dt.)','District') as H_NEW
        FROM (

 SELECT H_ADDRESS,B_ADDRESS
                FROM
                ( 
                    SELECT 'Washington Str. No:60 ABD' AS H_ADDRESS,'Washington Street No60 ABD' AS B_ADDRESS FROM DUAL UNION ALL 
                    SELECT 'Pennsylvania Dt. St. No 6 ABD' AS H_ADDRESS,'Pennslyvania District Street No6 ABD' AS B_ADDRESS FROM DUAL UNION ALL
                    SELECT 'Onion Dist.  No 63 Kartal' AS H_ADDRESS,'Onion District No 61 Kartal' AS B_ADDRESS FROM DUAL
                )
                )

感谢您的帮助。我编写了如下代码并且它正在工作。

 SELECT B_ADDRESS,H_ADDRESS,B_ADDRESS_C,H_ADDRESS_C,
 UTL_MATCH.jaro_winkler_similarity(B_ADDRESS_C,H_ADDRESS_C) AS JWS,
 UTL_MATCH.jaro_winkler(B_ADDRESS_C,H_ADDRESS_C) AS JW,
 UTL_MATCH.edit_distance_similarity(B_ADDRESS_C,H_ADDRESS_C) AS EDS,
 UTL_MATCH.edit_distance(B_ADDRESS_C,H_ADDRESS_C) AS ED

 FROM (

 SELECT H_ADDRESS,B_ADDRESS,
 INITCAP(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(H_ADDRESS,'S[a- 
 zA-Z]{1,}|S[a-zA-Z]r|S[t]','Street'),'D[a-zA-Z]{1,}|D[a-zA-Z] 
 {1,}|D[a-zA-Z]','District'),'[.: ]',' ')) AS H_ADDRESS_C,
 INITCAP(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(B_ADDRESS,'S[a- 
 zA-Z]{1,}|S[a-zA-Z]r|S[t]','Street'),'D[a-zA-Z]{1,}|D[a-zA-Z] 
 {1,}|D[a-zA-Z]','District'),'[.: ]',' '))  AS B_ADDRESS_C


            FROM
            ( 
                SELECT 'Washington Str. No:60 ABD' AS 
 H_ADDRESS,'Washington Street No60 ABD' AS B_ADDRESS FROM DUAL UNION 
 ALL 
                SELECT 'Pennslyvania Dt. St. No 6 ABD' AS 
 H_ADDRESS,'Pennslyvania District Street No6 ABD' AS B_ADDRESS FROM 
 DUAL UNION ALL
                SELECT 'Onion Dist. No 63 Kartal' AS H_ADDRESS,'Onion 
 District No 61 Kartal' AS B_ADDRESS FROM DUAL
            )
            )

【问题讨论】:

    标签: sql oracle regexp-replace


    【解决方案1】:

    基本上,您正在寻找相似地址。有多相似,由您决定。

    有样本数据:

    SQL> select * from test;
    
    H_ADDRESS                     B_ADDRESS
    ----------------------------- ------------------------------------
    Washington Str. No:60 ABD     Washington Street No60 ABD
    Pennsylvania Dt. St. No 6 ABD Pennslyvania District Street No6 ABD
    Onion Dist.  No 63 Kartal     Onion District No 61 Kartal
    

    您可以使用utl_match.jaro_winkler_similarity,它表示两个值的相似程度(百分比)。它返回

    SQL> select h_address, b_address,
      2    utl_match.jaro_winkler_similarity(h_address, b_address) sim
      3  from test;
    
    H_ADDRESS                     B_ADDRESS                                   SIM
    ----------------------------- ------------------------------------ ----------
    Washington Str. No:60 ABD     Washington Street No60 ABD                   96
    Pennsylvania Dt. St. No 6 ABD Pennslyvania District Street No6 ABD         88
    Onion Dist.  No 63 Kartal     Onion District No 61 Kartal                  89
    
    SQL>
    

    现在,正如我所说,由您决定哪种相似性对您来说足够好。是80%吗? 90%? 95%?我不能说,你决定。当你这样做时,将其用作

    SQL> with temp as
      2    (select h_address, b_address,
      3       utl_match.jaro_winkler_similarity(h_address, b_address) sim
      4     from test
      5    )
      6  select h_address, b_address
      7  from temp
      8  where sim >= 90;           --> here
    
    H_ADDRESS                     B_ADDRESS
    ----------------------------- ------------------------------------
    Washington Str. No:60 ABD     Washington Street No60 ABD
    
    SQL>
    

    或者,将其全部(地址和相似性)作为结果,并让其他人进行比较和过滤。

    【讨论】:

    • 感谢您的帮助。我真的很感激,真的很佩服。这些功能也能正常工作。现在我将编辑我的问题和答案。
    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多