在数据处理与分析中,尤其是在文本相似度计算方面,Oracle数据库提供了几个强大的工具函数。UTL_MATCH包中的两个函数——EDIT_DISTANCE_SIMILARITY和JARO_WINKLER_SIMILARITY,便是常用的文本相似度测量工具。

一、EDIT_DISTANCE_SIMILARITY函数

EDIT_DISTANCE_SIMILARITY函数用于计算两个字符串之间的编辑距离相似度。编辑距离是指将一个字符串转换为另一个字符串所需的最小操作数,操作包括插入、删除和替换字符。
函数UTL_MATCH.edit_distance_similarity返回一个介于0和100之间的相似度分数,表示两个字符串之间的相似程度,其中0表示完全不相似,100表示完全相似。

-- 0
SELECT UTL_MATCH.EDIT_DISTANCE_SIMILARITY('123456', '456789') AS similarity FROM dual;
-- 84
SELECT UTL_MATCH.EDIT_DISTANCE_SIMILARITY('123456', '123956') AS similarity FROM dual;
-- 67
SELECT UTL_MATCH.EDIT_DISTANCE_SIMILARITY('123456', '123654') AS similarity FROM dual;
-- 90
SELECT UTL_MATCH.EDIT_DISTANCE_SIMILARITY('1234567890', '1234567891') AS similarity FROM dual;
-- 100
SELECT UTL_MATCH.EDIT_DISTANCE_SIMILARITY('123456', '123456') AS similarity FROM dual;

上面相似度计算得到的值越接近100,说明它们的相似度越高。

二、JARO_WINKLER_SIMILARITY函数

JARO_WINKLER_SIMILARITY函数则基于Jaro-Winkler算法,该算法不仅考虑字符的相对顺序,还对字符串的前缀进行加权,以增加相似字符串的相似度。这使得该函数在处理相似的短字符串时,尤其是名字和地址等信息时,表现出色。Jaro-Winkler相似度的取值范围为0到100,数值越接近100表示字符串越相似。

-- 0
SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('123456', '456789') AS similarity FROM dual;
-- 92
SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('123456', '123956') AS similarity FROM dual;
-- 96
SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('123456', '123654') AS similarity FROM dual;
-- 96
SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('1234567890', '1234567891') AS similarity FROM dual;
-- 100
SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('123456', '123456') AS similarity FROM dual;

上面相似度计算得到的值越接近100,说明它们的相似度越高。其中有部分字符串比较结果和上面的EDIT_DISTANCE_SIMILARITY函数不同。

三、两者的比较

• 计算原理:

EDIT_DISTANCE_SIMILARITY依赖于编辑距离的概念,适用于需要考虑字符插入、删除和替换的场景。它适合于拼写检查、错别字纠正等任务。编辑距离(Levenshtein 距离)是将一个字符串转换为另一个字符串所需的最少编辑操作次数,这些操作包括插入、删除和替换字符。
JARO_WINKLER_SIMILARITY则更加关注字符串的相对顺序和前缀匹配,适合用于姓名、地址等短字符串的比较,能够更好地处理相似性。Jaro-Winkler 是基于匹配字符的相似度计算的算法,首先计算 Jaro 相似度,然后通过对公共前缀的加权来提高相似度值。

• 性能:

EDIT_DISTANCE_SIMILARITY在处理长字符串时,计算复杂度较高,可能会导致性能下降。
JARO_WINKLER_SIMILARITY相对而言在较短字符串的比较中效率更高,且计算量相对较小。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐