Heim >Datenbank >MySQL-Tutorial >Wie implementiert man eine Levenshtein-Distanzfunktion in MySQL?

Wie implementiert man eine Levenshtein-Distanzfunktion in MySQL?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 15:05:10741Durchsuche

How to Implement a Levenshtein Distance Function in MySQL?

Levenshtein-Funktion zu MySQL hinzufügen

In MySQL erfordert das Hinzufügen einer benutzerdefinierten Funktion wie der Levenshtein-Distanz die Erstellung einer gespeicherten Prozedur oder Funktion. Sie können jedoch den im verwiesenen WordPress-Beitrag bereitgestellten Code nutzen, indem Sie die folgenden Schritte ausführen:

  1. Mit MySQL verbinden: Stellen Sie mit Ihrer bevorzugten Methode eine Verbindung zu Ihrem MySQL-Server her (z. B. , Befehlszeile, MySQL Workbench).
  2. Erstellen Sie die gespeicherte Funktion: Führen Sie die folgende Anweisung in Ihrem SQL aus Editor:
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. Funktion testen: Sie können nun die folgende Abfrage ausführen, um die Levenshtein-Distanzfunktion zu testen:
SELECT levenshtein('abcde', 'abced');

Beispiel:

Die Abfrage gibt 2 zurück und bestätigt dies Der Levenshtein-Abstand zwischen „abcde“ und „abced“ beträgt 2.

Verwendung in PHP:

Um die Levenshtein-Funktion in PHP beim Herstellen einer Verbindung mit MySQL zu verwenden, können Sie diese ausführen den folgenden Code:

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

Das obige ist der detaillierte Inhalt vonWie implementiert man eine Levenshtein-Distanzfunktion in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn