Maison >base de données >tutoriel mysql >Comment implémenter la fonction Levenshtein dans MySQL ?

Comment implémenter la fonction Levenshtein dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 16:49:161031parcourir

How to Implement the Levenshtein Function in MySQL?

Comment implémenter la fonction Levenshtein dans MySQL

Vous souhaitez intégrer la fonction Levenshtein dans votre base de données MySQL pour faciliter les comparaisons de similarité de chaînes . Voici un guide étape par étape sur la façon d'y parvenir :

Comme mentionné, vous pouvez acquérir le code de la fonction de distance de Levenshtein ici. Une fois que vous avez le code, procédez aux étapes suivantes :

  1. Connectez-vous à votre serveur MySQL :

Établissez une connexion à votre serveur MySQL en utilisant votre méthode préférée, telle que MySQL Workbench.

  1. Exécutez la FONCTION CREATE Déclaration :

Exécutez l'instruction suivante pour créer la fonction Levenshtein dans votre base de données MySQL :

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. Vérifiez la création de la fonction :

Vous pouvez confirmer que la fonction a été créée avec succès en interrogeant it :

SHOW FUNCTION STATUS WHERE name = 'levenshtein'
  1. Exemple d'utilisation :

Pour utiliser la fonction Levenshtein, référencez-la simplement dans vos requêtes. Par exemple, pour calculer la distance de Levenshtein entre les chaînes 'abcde' et 'abced', vous utiliserez la requête suivante :

SELECT levenshtein('abcde', 'abced')

Cette requête renverra un résultat de 2, indiquant la distance de Levenshtein entre les deux chaînes.

  1. Utilisation de la fonction dans PHP :

Pour utiliser la fonction Levenshtein en PHP, vous pouvez exécuter des requêtes MySQL à partir de votre code. Par exemple :

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

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

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

Cet extrait de code se connecte à une base de données MySQL, exécute la requête spécifiée et imprime la distance de Levenshtein renvoyée par la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn