少し質問があります。そこで、レーベンシュタイン スコアを使用して、2 つの異なるテーブルにある通りの名前の 85% 以上の比較を検索しています。しかし、WHEREステートメントでレーベンシュタインスコア計算を使用すると、たとえば次のような出力が得られます。
- 1 つのテーブルにある通りの名前: BEAU SITE 1ÈRE AVENUE & BEAU SITE 2ÈME AVENUE
- 他のテーブルの通り名: BEAU SITE-1ÈRE AVENUE & BEAU SITE-2ÈRE AVENUE
- 出力: 最初のものは最初と 2 番目をオンにして、2 番目のものは 1 番目と 2 番目のものをすべてリンクします。
したがって、すべてのスコア計算に最大のスコアを使用する必要があり、これは次のようになります。
DECLARE
L_SCORE NUMBER;
L_NEW_SCORE NUMBER;
L_BEST_MAP varchar2(255);
CURSOR C_TO_FIND IS
SELECT TT_NAME, L_MUNI, R_MUNI
FROM Y_TT_NOT_LINKED_STREETS ;
CURSOR C_TOMTOM_STREET (L_MUNI VARCHAR2) IS
SELECT STREET_NAME
FROM STREET_NAME SN
JOIN STREET STR ON STR.STREET_ID = SN.STR_STREET_ID
JOIN ADMINISTRATIVE_AREA_NAME AAN ON AAN.AAR_ADMIN_AREA_ID = STR.AAR_ADMIN_AREA_ID
WHERE AAN.ADMIN_AREA_NAME = L_MUNI
AND STR.STREET_ID NOT IN (SELECT ROMA_STREET_ID FROM Y_DS_STREETS_LINK);
BEGIN
FOR S IN C_TO_FIND LOOP
L_SCORE := 0;
L_NEW_SCORE := 0;
FOR R IN C_TOMTOM_STREET(S.L_MUNI) LOOP
L_SCORE := PCK$ADDRESSMATCH.GET_LEVENSHTEIN_SCORE(S.TT_NAME,R.STREET_NAME);
IF L_SCORE > L_NEW_SCORE THEN
L_NEW_SCORE := L_SCORE ;
L_BEST_MAP := R.STREET_NAME ||CHR(9)||TO_CHAR(L_NEW_SCORE);
END IF;
END LOOP;
IF L_NEW_SCORE > 85 THEN
DBMS_OUTPUT.PUT_LINE(S.L_MUNI||CHR(9)||S.TT_NAME||chr(9)||L_BEST_MAP);
END IF;
L_NEW_SCORE := 0;
END LOOP;
END;
問題は、出力を WHERE ステートメントでどのように使用すれば、最大のレーベンシュタイン スコアのみにリンクでき、上記の問題が発生しないかということです。SELECT ... FROM ... WHERE (前のブロックコードからの最大スコア)
(または別の方法で、SQL を丸 1 週間実行した後、これに対する解決策がわかりません)
どうも!=)