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

时间:2011-11-09 16:30:42

标签: java string oracle

跟进我之前的帖子Link here,我们现在面临的另一个挑战是找到地址字段[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

对于传入记录,如下

ADDR_LINE_1,        ADDR_LINE_2, CITY        , STATE, ZIP
1 Chestnut Avenue,   Apt 100   , Indiana     , IN   , 9999

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

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

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

1 个答案:

答案 0 :(得分:6)

根据Oracle版本的不同,您可以使用UTL_MATCH package生成相似性分数,然后根据您的阈值分数进行调整。例如,使用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

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