MySQL でレーベンシュタイン関数を実装する方法
文字列の類似性比較を容易にするために、MySQL データベースにレーベンシュタイン関数を組み込もうとしています。 。これを実現する方法についてのステップバイステップのガイドは次のとおりです。
前述したように、レーベンシュタイン距離関数のコードはここで取得できます。コードを取得したら、次の手順に進みます。
次を使用して MySQL サーバーへの接続を確立します。 MySQL Workbench などの好みの方法。
次のステートメントを実行して、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;
が確認できます。関数はクエリによって正常に作成されました:
SHOW FUNCTION STATUS WHERE name = 'levenshtein'
レーベンシュタイン関数を使用するには、単純にそれを参照します。あなたの質問。たとえば、文字列「abcde」と「abced」の間のレーベンシュタイン距離を計算するには、次のクエリを使用します。
SELECT levenshtein('abcde', 'abced')
このクエリは、結果 2 を返します。これは、文字列間のレーベンシュタイン距離を示します。 2 つの文字列。
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 サイトの他の関連記事を参照してください。