ホームページ >データベース >mysql チュートリアル >MySQL でレーベンシュタイン距離関数を実装するにはどうすればよいですか?

MySQL でレーベンシュタイン距離関数を実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 15:05:10681ブラウズ

How to Implement a Levenshtein Distance Function in MySQL?

MySQL へのレーベンシュタイン関数の追加

MySQL で、レーベンシュタイン距離などのカスタム関数を追加するには、ストアド プロシージャまたは関数を作成する必要があります。ただし、次の手順に従って、参照されている 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。