Oracle和達夢:相似度函數:UTL_MATCH
UTL_MATCH介紹:
Oracle的UTL_MATCH包是一個提供字符串匹配和相似度計算功能的工具包。它包含了一系列函數,用于執行字符串比較、相似度計算和模式匹配等操作。
UTL_MATCH包中的函數可以用于以下任務:
-
字符串相似度計算:UTL_MATCH提供了多個函數來計算字符串之間的相似度,如Jaro-Winkler相似度、編輯距離等。
-
模式匹配:UTL_MATCH提供了函數來執行基于模式的匹配,如正則表達式匹配、通配符匹配等。
-
字符串比較:UTL_MATCH提供了函數來執行字符串的比較,如大小寫敏感或不敏感的比較、基于排序規則的比較等。
-
字符串規范化:UTL_MATCH提供了函數來規范化字符串,如去除多余的空格、轉換為大寫或小寫等。
UTL_MATCH包提供了一些有用的功能,可以幫助開發人員在Oracle數據庫中進行字符串處理和匹配操作。請注意,使用UTL_MATCH包需要適當的權限,并且在正確的數據庫環境中執行。
1、歸一化編輯距離
函數:UTL_MATCH.edit_distance_similarity
-
UTL_MATCH.edit_distance_similarity是Oracle數據庫中的一個函數,用于計算兩個字符串之間的相似度。它基于編輯距離算法,該算法用于衡量兩個字符串之間的相似程度。
-
編輯距離是通過計算將一個字符串轉換為另一個字符串所需的最少編輯操作次數來衡量的。這些編輯操作可以是插入、刪除或替換字符。
-
函數UTL_MATCH.edit_distance_similarity返回一個介于0和100之間的相似度分數,表示兩個字符串之間的相似程度,其中0表示完全不相似,100表示完全相似。
-
通過使用UTL_MATCH.edit_distance_similarity函數,您可以比較兩個字符串的相似程度,并根據需要進行進一步的處理或決策。例如,您可以在搜索引擎中使用它來提供與用戶查詢相關的最佳匹配結果,或者在數據清洗過程中使用它來查找相似的字符串并進行合并或去重操作。
使用
1、第一個參數是要匹配的字符串,第二個參數是要與之進行匹配的字符串
SELECT UTL_MATCH.edit_distance_similarity ('param1', 'param2') AS similarity
- 返回:84
☆2、第一個參數可以是查詢表的列,您可以將表的列名作為第一個參數傳遞給該函數,以計算該列中每個值與指定字符串之間的相似度。
SELECT UTL_MATCH.edit_distance_similarity (列名, '6') AS similarity
SELECT UTL_MATCH.edit_distance_similarity ("列名", '6') AS similarity
實踐
- 查詢表TABLE_1的C2_VARCHAR2字段的值和6匹配的相似度,并且取相似度大于2的值
SELECT
*
FROM
(
SELECT
UTL_MATCH.edit_distance_similarity (C2_VARCHAR2, '6') AS similarity,
*
FROM
TABLE_1
ORDER BY similarity DESC) AS a
WHERE
similarity >= 2
返回:

2、Jaro-Winkler相似度算法
函數:UTL_MATCH.JARO_WINKLER_SIMILARITY
Jaro-Winkler相似度是一種用于比較兩個字符串之間相似程度的度量方法。它基于字符匹配和字符順序的相似性,常用于姓名、地址等文本數據的相似度計算。
Jaro-Winkler相似度算法由William E. Winkler在1989年提出,是對Jaro相似度算法的改進。它通過計算字符匹配的數量、字符順序的相似性以及前綴匹配的權重來確定字符串的相似度。
Jaro-Winkler相似度的計算過程如下:
-
計算匹配的字符數量(m):對于兩個字符串,計算在相同位置上字符相等的數量。
-
計算相似字符交換的數量(t):對于兩個字符串,計算在不同位置上字符相等但順序不同的數量。
-
計算相似度(similarity):根據公式計算相似度,公式如下:
similarity = (m / |s1| + m / |s2| + (m - t) / m) / 3
- 計算前綴匹配的權重(prefix weight):如果兩個字符串的前綴匹配,則根據公式計算前綴匹配的權重,公式如下:
prefix weight = prefixLen * p * (1 - similarity)
其中,prefixLen是前綴匹配的長度,p是一個常數(通常為0.1),similarity是相似度。
- 計算Jaro-Winkler相似度(JW similarity):根據公式計算Jaro-Winkler相似度,公式如下:
JW similarity = similarity + prefix weight
Jaro-Winkler相似度的取值范圍為0到100,數值越接近100表示字符串越相似。
在Oracle數據庫中,可以使用UTL_MATCH包中的UTL_MATCH.JARO_WINKLER_SIMILARITY函數來計算Jaro-Winkler相似度。該函數接受兩個字符串作為參數,并返回它們之間的Jaro-Winkler相似度值。
使用
-- oracle/dm實現的:Jaro-Winkler相似度算法
SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('h1e2l3l4o', 'ddddhello') AS JaroWinkler相似度;
結果

浙公網安備 33010602011771號