首页 >数据库 >mysql教程 >如何在MySQL中实现Levenshtein函数?

如何在MySQL中实现Levenshtein函数?

Barbara Streisand
Barbara Streisand原创
2024-12-07 16:49:161028浏览

How to Implement the Levenshtein Function in MySQL?

如何在 MySQL 中实现 Levenshtein 函数

您希望将 Levenshtein 函数合并到 MySQL 数据库中以方便字符串相似性比较。以下是有关如何实现此目标的分步指南:

如上所述,您可以在此处获取编辑距离函数的代码。获得代码后,请继续执行以下步骤:

  1. 连接到您的 MySQL 服务器:

使用以下命令建立与您的 MySQL 服务器的连接您首选的方法,例如 MySQL Workbench。

  1. 执行 CREATE FUNCTION 语句:

运行以下语句以在 MySQL 数据库中创建 Levenshtein 函数:

CREATE FUNCTION levenshtein(a VARCHAR(255), b VARCHAR(255)) RETURNS SMALLINT DETERMINISTIC
BEGIN
  DECLARE i, j, s VARCHAR(255), costs VARCHAR(255);
  DECLARE c, mina, minb, napi, napj, cost_a, cost_b, di, dj, new COSTTYPE[];
  
  SET s = REPEAT(' ',LENGTH(b)+2);
  SET costs = REPEAT(' ',(LENGTH(b)+2) * (LENGTH(a)+2));
  SET c = 1;
  WHILE c <= LENGTH(a) DO
    SET new = costs + 1;
    SET mina = c + 1;
    SET i = 1;
    WHILE i <= LENGTH(b) DO
      SET napj = costs + (i * 2) + 1;
      SET di = CHAR_LENGTH(SUBSTR(a,c,1));
      SET dj = CHAR_LENGTH(SUBSTR(b,i,1));
      SET napj = costs + (i * 2) + 2;
      IF di = dj AND di > 0 AND dj > 0 THEN
        IF di > 1 AND di < 127 AND dj > 1 AND dj < 127 AND (di-dj=-1 OR di-dj=1) AND SUBSTR(a,c,1) = SUBSTR(b,i,1) THEN
          SET napi = costs + 2;
        ELSE
          SET napi = costs + (i * 2) + 3;
        END IF;
      ELSE
        SET napi = costs + 2;
      END IF;
      
      SET cost_a = napj - mina;
      SET cost_b = napi - napj;
      
      SET mina = new + (i * 2) + 1;
      SET minb = napi + 1;
      
      IF cost_a < cost_b AND cost_a < mina THEN
        SET c = di + 1;
        SET costs = new;
      ELSEIF cost_b < mina THEN
        SET di = dj + 1;
        SET costs = new;
      ELSE
        SET mina = new + (i * 2) + 1;
      END IF;
      SET napj = mina;
      SET mina = napi;
      SET i = i + 1;
    END WHILE;
    SET c = c + 1;
  END WHILE;
  
  RETURN napj - mina;
END;
  1. 验证函数创建:

您可以确认该函数已成功创建查询它:

SHOW FUNCTION STATUS WHERE name = 'levenshtein'
  1. 用法示例:

要使用 Levenshtein 函数,只需在查询中引用它即可。例如,要计算字符串 'abcde' 和 'abced' 之间的编辑距离,您可以使用以下查询:

SELECT levenshtein('abcde', 'abced')

此查询将返回结果 2,表示字符串之间的编辑距离两个字符串。

  1. 使用函数PHP:

要使用 PHP 中的 Levenshtein 函数,您可以从代码中执行 MySQL 查询。例如:

$mysqli = new mysqli('localhost', 'username', 'password', 'database');

$query = "SELECT levenshtein('abcde', 'abced')";
$result = $mysqli->query($query);

while ($row = $result->fetch_assoc()) {
  echo $row['levenshtein'];  
}

此代码片段连接到 MySQL 数据库,执行指定的查询,并打印出数据库返回的编辑距离。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn