栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在MYSQL中计算两个字符串之间的相似度

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在MYSQL中计算两个字符串之间的相似度

您可以使用此功能(从http://www.artfulsoftware.com/infotree/queries.php#552改编的cop
^ H ^ H ^ ):

CREATE FUNCTION `levenshtein`( s1 text, s2 text) RETURNS int(11)    DETERMINISTICBEGIN     DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;     DECLARE s1_char CHAR;     DECLARE cv0, cv1 text;     SET s1_len = CHAR_LENGTH(s1), s2_len = CHAR_LENGTH(s2), cv1 = 0x00, j = 1, i = 1, c = 0;     IF s1 = s2 THEN       RETURN 0;     ELSEIF s1_len = 0 THEN       RETURN s2_len;     ELSEIF s2_len = 0 THEN       RETURN s1_len;     ELSE       WHILE j <= s2_len DO         SET cv1 = CONCAt(cv1, UNHEx(HEx(j))), j = j + 1;       END WHILE;       WHILE i <= s1_len DO         SET s1_char = SUBSTRINg(s1, i, 1), c = i, cv0 = UNHEx(HEx(i)), j = 1;         WHILE j <= s2_len DOSET c = c + 1;IF s1_char = SUBSTRINg(s2, j, 1) THEN   SET cost = 0; ELSE SET cost = 1;END IF;SET c_temp = CONv(HEx(SUBSTRINg(cv1, j, 1)), 16, 10) + cost;IF c > c_temp THEN SET c = c_temp; END IF;  SET c_temp = CONv(HEx(SUBSTRINg(cv1, j+1, 1)), 16, 10) + 1;  IF c > c_temp THEN     SET c = c_temp;   END IF;  SET cv0 = CONCAt(cv0, UNHEx(HEx(c))), j = j + 1;         END WHILE;         SET cv1 = cv0, i = i + 1;       END WHILE;     END IF;     RETURN c;   END

并以XX%的价格使用此功能

CREATE FUNCTION `levenshtein_ratio`( s1 text, s2 text ) RETURNS int(11)    DETERMINISTICBEGIN     DECLARE s1_len, s2_len, max_len INT;     SET s1_len = LENGTH(s1), s2_len = LENGTH(s2);     IF s1_len > s2_len THEN        SET max_len = s1_len;      ELSE        SET max_len = s2_len;      END IF;     RETURN ROUND((1 - LEVENSHTEIN(s1, s2) / max_len) * 100);   END


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390639.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号