Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Fungsi Jarak Levenshtein dalam MySQL?

Bagaimana untuk Melaksanakan Fungsi Jarak Levenshtein dalam MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 15:05:10685semak imbas

How to Implement a Levenshtein Distance Function in MySQL?

Menambah Fungsi Levenshtein pada MySQL

Dalam MySQL, menambah fungsi tersuai seperti jarak Levenshtein memerlukan anda mencipta prosedur atau fungsi tersimpan. Walau bagaimanapun, anda boleh memanfaatkan kod yang disediakan dalam catatan WordPress yang dirujuk dengan mengikuti langkah berikut:

  1. Sambung ke MySQL: Wujudkan sambungan ke pelayan MySQL anda menggunakan kaedah pilihan anda (cth. , baris arahan, Meja Kerja MySQL).
  2. Buat Fungsi Tersimpan: Laksanakan pernyataan berikut dalam editor SQL anda:
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. Uji Fungsi: Anda kini boleh melaksanakan pertanyaan berikut untuk menguji fungsi jarak Levenshtein:
SELECT levenshtein('abcde', 'abced');

Contoh:

The pertanyaan mengembalikan 2, mengesahkan bahawa jarak Levenshtein antara 'abcde' dan 'abced' ialah 2.

Penggunaan dalam PHP:

Untuk menggunakan fungsi Levenshtein dalam PHP apabila menyambung kepada MySQL, anda boleh melaksanakan kod berikut:

$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'];
}

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi Jarak Levenshtein dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn