查找String值的最佳匹配 - Oracle/Java

nam*_*ked 1 java string oracle

继我之前的帖子链接,我们现在面临的另一个挑战是找到地址字段的最佳匹配[ADDR_LINE_1, ADDR_LINE_2, CITY, STATE, ZIP].

我们希望返回数据库中的所有记录,这些记录可能与来自文件的传入地址记录匹配.场景是:

以下是数据库中的2条记录;

ADDR_LINE_1,        ADDR_LINE_2       , CITY       , STATE, ZIP
001 Chestnut Avenue, Apt 100          , Indiana     , IN  , 9999
Apt 100            , 001 Chestnut Ave., Indianapolis, IN  , 9999
Run Code Online (Sandbox Code Playgroud)

对于传入记录,如下所示

ADDR_LINE_1,        ADDR_LINE_2, CITY        , STATE, ZIP
1 Chestnut Avenue,   Apt 100   , Indiana     , IN   , 9999
Run Code Online (Sandbox Code Playgroud)

我想将记录检测为现有记录并列出上述两种可能的匹配.

[注意:]数据库条目的顺序是互换的,但仍应列为可能的匹配项.

任何人都可以提供关于我如何去做的建议吗?

Jus*_*ave 6

根据Oracle版本的不同,您可以使用UTL_MATCH包生成相似性分数,然后根据您的阈值分数进行调整.例如,使用Jaro-Winkler算法,字符串'001 Chestnut Avenue'和字符串'1 Chestnut Avenue'之间有96%的相似性

SQL> select utl_match.jaro_winkler_similarity( '001 Chestnut Avenue',
  2                                            '1 Chestnut Avenue' )
  3    from dual;

UTL_MATCH.JARO_WINKLER_SIMILARITY('001CHESTNUTAVENUE','1CHESTNUTAVENUE')
------------------------------------------------------------------------
                                                                      96
Run Code Online (Sandbox Code Playgroud)

显然,你可能需要做一些工作来确定赋予各种领域的权重 - 例如,你可能有更高的门槛来匹配城市,这可能是相对标准化的,而不是第二行的地址.