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

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

Barbara Streisand
リリース: 2024-12-07 16:49:16
オリジナル
1008 人が閲覧しました

How to Implement the Levenshtein Function in MySQL?

MySQL でレーベンシュタイン関数を実装する方法

文字列の類似性比較を容易にするために、MySQL データベースにレーベンシュタイン関数を組み込もうとしています。 。これを実現する方法についてのステップバイステップのガイドは次のとおりです。

前述したように、レーベンシュタイン距離関数のコードはここで取得できます。コードを取得したら、次の手順に進みます。

  1. MySQL サーバーに接続します。

次を使用して MySQL サーバーへの接続を確立します。 MySQL Workbench などの好みの方法。

  1. CREATE FUNCTION ステートメント:

次のステートメントを実行して、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. 関数の作成を確認します:

が確認できます。関数はクエリによって正常に作成されました:

SHOW FUNCTION STATUS WHERE name = 'levenshtein'
ログイン後にコピー
  1. 使用例:

レーベンシュタイン関数を使用するには、単純にそれを参照します。あなたの質問。たとえば、文字列「abcde」と「abced」の間のレーベンシュタイン距離を計算するには、次のクエリを使用します。

SELECT levenshtein('abcde', 'abced')
ログイン後にコピー

このクエリは、結果 2 を返します。これは、文字列間のレーベンシュタイン距離を示します。 2 つの文字列。

  1. での関数の使用PHP:

PHP でレーベンシュタイン関数を利用するには、コードから MySQL クエリを実行できます。例:

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

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

while ($row = $result->fetch_assoc()) {
  echo $row['levenshtein'];  
}
ログイン後にコピー

このコード スニペットは MySQL データベースに接続し、指定されたクエリを実行し、データベースから返されたレーベンシュタイン距離を出力します。

以上がMySQL でレーベンシュタイン関数を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート