首頁 > 資料庫 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板