집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에서 문자열 유사성 백분율을 효율적으로 계산하는 방법은 무엇입니까?
MySQL에 저장된 두 문자열 간의 유사성을 확인하려면 Levenshtein 거리와 같은 효율적인 알고리즘을 사용하는 것이 좋습니다. 이 접근 방식은 한 문자열을 다른 문자열로 변환하는 데 필요한 단일 문자 편집(추가, 제거 또는 대체) 횟수를 계산합니다.
MySQL은 문자열에 대한 일련의 함수를 제공합니다. 시장 조작. 다음은 두 문자열 s1과 s2 사이의 Levenshtein 거리를 계산하는 예제 함수(levenshtein)입니다.
CREATE FUNCTION `levenshtein`(s1 text, s2 text) RETURNS int(11) DETERMINISTIC BEGIN # Initialize variables DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT; DECLARE s1_char CHAR; DECLARE cv0, cv1 text; SET s1_len = CHAR_LENGTH(s1), s2_len = CHAR_LENGTH(s2), cv1 = 0x00, j = 1, i = 1, c = 0; # Check for edge cases IF s1 = s2 THEN RETURN 0; ELSEIF s1_len = 0 THEN RETURN s2_len; ELSEIF s2_len = 0 THEN RETURN s1_len; ELSE # Main loop over s1 characters WHILE j <= s2_len DO SET cv1 = CONCAT(cv1, UNHEX(HEX(j))), j = j + 1; END WHILE; WHILE i <= s1_len DO SET s1_char = SUBSTRING(s1, i, 1), c = i, cv0 = UNHEX(HEX(i)), j = 1; # Inner loop over s2 characters WHILE j <= s2_len DO SET c = c + 1; IF s1_char = SUBSTRING(s2, j, 1) THEN SET cost = 0; ELSE SET cost = 1; END IF; SET c_temp = CONV(HEX(SUBSTRING(cv1, j, 1)), 16, 10) + cost; IF c > c_temp THEN SET c = c_temp; END IF; SET c_temp = CONV(HEX(SUBSTRING(cv1, j + 1, 1)), 16, 10) + 1; IF c > c_temp THEN SET c = c_temp; END IF; SET cv0 = CONCAT(cv0, UNHEX(HEX(c))), j = j + 1; END WHILE; SET cv1 = cv0, i = i + 1; END WHILE; END IF; # Return Levenshtein distance RETURN c; END
Levenshtein 거리를 계산하면 유사성 백분율을 계산할 수 있습니다. 다음과 같습니다:
CREATE FUNCTION `levenshtein_ratio`(s1 text, s2 text) RETURNS int(11) DETERMINISTIC BEGIN DECLARE s1_len, s2_len, max_len INT; SET s1_len = LENGTH(s1), s2_len = LENGTH(s2); IF s1_len > s2_len THEN SET max_len = s1_len; ELSE SET max_len = s2_len; END IF; RETURN ROUND((1 - LEVENSHTEIN(s1, s2) / max_len) * 100); END
예를 들어, MySQL에 두 개의 문자열이 있습니다:
SET @a = "Welcome to Stack Overflow"; SET @b = "Hello to stack overflow";
levenshtein_ratio 함수 사용:
SELECT LEVENSHTEIN_RATIO(@a, @b);
두 문자열 사이의 유사성 비율을 나타내는 값을 반환합니다. 제공된 예는 60입니다.
위 내용은 MySQL에서 문자열 유사성 백분율을 효율적으로 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!