UTL_MATCH: تطابق رشتهها بهوسیله بررسی میزان شباهت و تفاوتها
بسته UTL_MATCH در اراکل نسخه ۱۰gr2 معرفی گردید ولی برای اولین بار در نسخه ۱۱gr2 به طور رسمی پشتیبانی گردید. این بسته شامل چندین قابلیت مفید برای بررسی میزان شباهت تفاوت میان رشتهها میباشد.
راهاندازی
مثالهای موجود در این نوشته نیاز به تعریف جداول زیر دارند:
DROP TABLE match_tab;
CREATE TABLE match_tab (
id NUMBER,
col1 VARCHAR2(15),
col2 VARCHAR2(15),
CONSTRAINT match_tab_pk PRIMARY KEY (id)
);
INSERT INTO match_tab VALUES (1, ‘Peter Parker’, ‘Pete Parker’);
INSERT INTO match_tab VALUES (2, ‘Peter Parker’, ‘peter parker’);
INSERT INTO match_tab VALUES (3, ‘Clark Kent’, ‘Claire Kent’);
INSERT INTO match_tab VALUES (4, ‘Wonder Woman’, ‘Ponder Woman’);
INSERT INTO match_tab VALUES (5, ‘Superman’, ‘Superman’);
INSERT INTO match_tab VALUES (6, ‘The Hulk’, ‘Iron Man’);
COMMIT;
EDIT_DISTANCE
تست Edit Distance یا Levenshtein Distance، به منظور سنجش میزان شباهت بین دو رشته به وسیله شمارش تعداد تغییرات کاراکتری آنها (inserts, updates, deletes) است. در این تست نیاز به تبدیل رشته اول به رشته دوم میباشد که تعداد این تغییرات مورد نیاز به عنوان distance شناخته میشود.
SELECT col1,
col2,
UTL_MATCH.edit_distance(col1, col2) AS ed
FROM match_tab
ORDER BY id;
COL1 COL2 ED
————— ————— ———-
Peter Parker Pete Parker 1
Peter Parker peter parker 2
Clark Kent Claire Kent 2
Wonder Woman Ponder Woman 1
Superman Superman 0
The Hulk Iron Man 8
۶ rows selected.
SQL>
EDIT_DISTANCE_SIMILARITY
EDIT_DISTANCE_SIMILARITY به همان شیوه EDIT_DISTANCE عمل مینماید با این تفاوت که این عملگر مقادیر و نتایج نرمالسازی شده در بازه بین ۰ (عدم تطابق) و ۱۰۰ (تطابق کامل) را باز میگرداند.
SELECT col1,
col2,
UTL_MATCH.edit_distance_similarity(col1, col2) AS eds
FROM match_tab
ORDER BY id;
COL1 COL2 EDS
————— ————— ———-
Peter Parker Pete Parker 92
Peter Parker peter parker 84
Clark Kent Claire Kent 82
Wonder Woman Ponder Woman 92
Superman Superman 100
The Hulk Iron Man 0
۶ rows selected.
SQL>
SELECT id,
col1,
col2,
UTL_MATCH.edit_distance_similarity(col1, col2) AS eds
FROM match_tab
WHERE UTL_MATCH.edit_distance_similarity(col1, col2) > 90
ORDER BY id;
ID COL1 COL2 EDS
———- ————— ————— ———-
۱ Peter Parker Pete Parker 92
۴ Wonder Woman Ponder Woman 92
۵ Superman Superman 100
SQL>
JARO_WINKLER
الگوریتم Jaro-Winkler از شیوه متفاوتی برای محاسبه میزان تفاوت دو رشته استفاده مینماید.
SELECT col1,
col2,
UTL_MATCH.jaro_winkler(col1, col2) AS jw
FROM match_tab
ORDER BY id;
COL1 COL2 JW
————— ————— ———-
Peter Parker Pete Parker 9.288E-001
Peter Parker peter parker 8.889E-001
Clark Kent Claire Kent 9.083E-001
Wonder Woman Ponder Woman 9.444E-001
Superman Superman 1.0E+000
The Hulk Iron Man 4.167E-001
۶ rows selected.
SQL>
JARO_WINKLER_SIMILARITY
عملگر JARO_WINKLER_SIMILARITY از شیوه مشابه JARO_WINKLER برای تعیین میزان شباهت رشتهها استفاده مینماید با این تفاوت که این عملگر مقادیر و نتایج نرمالسازی شده در بازه بین ۰ (عدم تطابق) و ۱۰۰ (تطابق کامل) را باز میگرداند.
SELECT col1,
col2,
UTL_MATCH.jaro_winkler_similarity(col1, col2) AS jws
FROM match_tab
ORDER BY id;
COL1 COL2 JWS
————— ————— ———-
Peter Parker Pete Parker 92
Peter Parker peter parker 88
Clark Kent Claire Kent 90
Wonder Woman Ponder Woman 94
Superman Superman 100
The Hulk Iron Man 41
۶ rows selected.
SQL>
SELECT col1,
col2,
UTL_MATCH.jaro_winkler_similarity(col1, col2) AS jws
FROM match_tab
WHERE UTL_MATCH.jaro_winkler_similarity(col1, col2) > 90
ORDER BY id;
COL1 COL2 JWS
————— ————— ———-
Peter Parker Pete Parker 92
Wonder Woman Ponder Woman 94
Superman Superman 100
SQL>