UTL_MATCH: تطابق رشته‌ها به‌وسیله بررسی میزان شباهت و تفاوت‌ها

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>

دیدگاهتان را بنویسید