如何在 MySQL 中实现 Levenshtein 函数
您希望将 Levenshtein 函数合并到 MySQL 数据库中以方便字符串相似性比较。以下是有关如何实现此目标的分步指南:
如上所述,您可以在此处获取编辑距离函数的代码。获得代码后,请继续执行以下步骤:
使用以下命令建立与您的 MySQL 服务器的连接您首选的方法,例如 MySQL Workbench。
运行以下语句以在 MySQL 数据库中创建 Levenshtein 函数:
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'
要使用 Levenshtein 函数,只需在查询中引用它即可。例如,要计算字符串 'abcde' 和 'abced' 之间的编辑距离,您可以使用以下查询:
SELECT levenshtein('abcde', 'abced')
此查询将返回结果 2,表示字符串之间的编辑距离两个字符串。
要使用 PHP 中的 Levenshtein 函数,您可以从代码中执行 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中实现Levenshtein函数?的详细内容。更多信息请关注PHP中文网其他相关文章!