mysql levenshtein_MySQL Levenshtein

我正在尝试创建一个MySQL函数来计算levenshtein距离.我找到了一个看起来非常接近我所需要的功能,但是它不断向各处抛出错误 – 我是MySQL新手,所以我不知道出了什么问题?

这是功能:

DELIMITER $$

CREATE FUNCTION LEVENSHTEIN( s1 CHAR(255), s2 CHAR(255))

RETURNS int(3)

DETERMINISTIC

BEGIN

DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;

DECLARE s1_char CHAR(255);

DECLARE cv0, cv1 CHAR(255);

SET s1_len = LENGTH(s1);

SET s2_len = LENGTH(s2);

SET cv1 = 0x00;

SET j = 1;

SET i = 1;

SET c = 0;

IF s1 = s2 THEN

RETURN 0;

ELSE IF s1_len = 0 THEN

RETURN s2_len;

ELSE IF s2_len = 0 THEN

RETURN s1_len;

ELSE

WHILE j <= s2_len DO

SET 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;

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$$

DELIMITER ;

这是错误(到目前为止).

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE; END IF; RETURN c; END' at line 36

编辑:原始代码可以找到here

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL并没有直接提供计算最短编辑距离的函数或方法。最短编辑距离是一个用于度量两个字符串之间相似度的概念,常用于文本相似度匹配、拼写纠错等场景。 如果你想在MySQL中计算最短编辑距离,可以考虑通过自定义函数来实现。一种较常见的实现方式是使用Levenshtein距离算法,该算法衡量了两个字符串之间的编辑操作次数(插入、删除和替换)。 在MySQL中,你可以编写自定义函数来计算Levenshtein距离。以下是一个示例自定义函数的代码: ```sql DELIMITER // CREATE FUNCTION LEVENSHTEIN(s1 VARCHAR(255), s2 VARCHAR(255)) RETURNS INT BEGIN DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT; DECLARE s1_char CHAR; DECLARE cv0, cv1 VARBINARY(256); 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 DO SET 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 // DELIMITER ; ``` 使用该自定义函数可以计算两个字符串之间的最短编辑距离。例如: ```sql SELECT LEVENSHTEIN('kitten', 'sitting'); -- 返回结果为 3 ``` 请注意,这只是一种示例实现方式,你也可以根据自己的需要进行调整或优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值