2011-11-09 3 views
1

私の前のポストLink hereにアップした後、私たちが今直面している他の課題は、アドレスフィールド[ADDR_LINE_1, ADDR_LINE_2, CITY, STATE, ZIP]ための最良の一致を見つけることです。見つけるベストマッチ - オラクル/ Javaの

私たちは、[ファイルから]の着信アドレスレコードに可能な一致になり、データベース内のすべてのレコードを返すようにしたいです。シナリオは次のとおりです。

データベースには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

初段 - 何handwavingありませんポイントに、「可能性の一致」を定義し、それを強く与えられた記録が可能に一致するかどうかを定義します。第2段階 - このブール関数を実装する(これは簡単にできるはずです)。 –

+0

あなたの提案をお寄せいただきありがとうございます、これまで私が考えることができることは次のとおりです。まず、City、State、Zipcodeなどの一定の値に基づいてレコードをフィルタリングすることができます。これはおそらく私が絞り込むのに役立ちます。次に、住所ライン1と住所ライン2の文字列トークンについて、少なくとも1/2のトークンが連結されているかどうかを調べることができます。つまり、「001 Chestnut Avenue」と「Apt 100」を連結し、「1 Chestnut Avenue 100pt "を検索し、5つの文字列トークンのうちの3つを見つけます。これにより、レコード全体が一致する可能性があります。 –

+0

私はパフォーマンスについては少し心配しています –

答えて

6

Oracleのバージョンに応じて、類似性スコアを生成し、閾値スコアがあなたに合理的と思われるものをいじるためにUTL_MATCH packageを使用することができます。例えば、JARO-ウィンクラーアルゴリズム明らかに

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 

を使用して、文字列「001栗アベニュー」と文字列「1栗アベニュー」の間の96%の類似性がある、あなたはおそらくにいくつかの作業を行う必要があると思いますさまざまな分野にどのような重みを付けるかを特定します。たとえば、住所の2行目よりも相対的に標準化される可能性が高い都市で一致させるためのしきい値が高いとします。

+0

Justinに感謝します。あなたは私をもう一度救った! :-) –