首页 > 数据库 > mysql教程 > 如何在 MySQL 中实现编辑距离函数?

如何在 MySQL 中实现编辑距离函数?

Mary-Kate Olsen
发布: 2024-12-27 15:05:10
原创
674 人浏览过

How to Implement a Levenshtein Distance Function in MySQL?

向 MySQL 添加 Levenshtein 函数

在 MySQL 中,添加像 Levenshtein 距离这样的自定义函数需要创建存储过程或函数。但是,您可以按照以下步骤利用引用的 WordPress 帖子中提供的代码:

  1. 连接到 MySQL: 使用您喜欢的方法(例如, 、命令行、MySQL Workbench)。
  2. 创建存储函数:在 SQL 中执行以下语句编辑器:
DELIMITER $$
CREATE FUNCTION levenshtein(str1 VARCHAR(255), str2 VARCHAR(255))
  RETURNS INT
  DETERMINISTIC
BEGIN
  DECLARE str1len, str2len, i, j, cost, c, vtemp INT;
  DECLARE vmatrix VARCHAR(255);

  CALL max(length(str1), length(str2), str1len, str2len);

  SET vtemp = power(2, str2len) * power(2, str1len);
  SET vmatrix = LPAD('0', vtemp, '0');

  SET i = 1;
  WHILE i <= str1len DO
    SET t = SUBSTR(str1, i, 1);
    SET j = 1;
    WHILE j <= str2len DO
      SET s = SUBSTR(str2, j, 1);

      IF i = 1 THEN
        CALL min3(j, vmatrix, i * j, j + 1);
      END IF;
      IF j = 1 THEN
        CALL min3(i, vmatrix, i, i * str2len + j);
      END IF;

      SET cost = IF(t = s, 0, 1);
      CALL min3(vmatrix, vmatrix, cost + vmatrix, i * str2len + j);

      CALL min3(i, vmatrix, vmatrix, i * str2len + j + 1);
      CALL min3(j, vmatrix, vmatrix, (i + 1) * str2len + j);

      SET j = j + 1;
    END WHILE;
  SET i = i + 1;
END WHILE;

  RETURN vmatrix;
END
$$
DELIMITER ;
登录后复制
  1. 测试功能:您现在可以执行以下查询来测试编辑距离函数:
SELECT levenshtein('abcde', 'abced');
登录后复制

示例:

查询返回 2,确认 'abcde' 和 'abced' 之间的编辑距离为 2。

用途PHP:

要在连接 MySQL 时使用 PHP 中的 Levenshtein 函数,可以执行以下代码:

$sql = 'SELECT levenshtein(?, ?) AS distance';
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss', $str1, $str2);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
  $distance = $row['distance'];
}
登录后复制

以上是如何在 MySQL 中实现编辑距离函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板