跟进我之前的帖子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
我想将记录检测为现有记录,并列出上述两种可能的匹配。
[注意:]数据库条目的顺序是互换的,但仍应列为可能的匹配。
任何人都可以提供关于我如何去做的建议吗?
答案 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
显然,你可能需要做一些工作来确定赋予各种领域的权重 - 大概,例如,你有一个更高的门槛来匹配城市,这可能是相对标准化的地址的第二行。