자동 완성을 위한 PHP와 MySQL의 퍼지 회사 이름 일치
소개
찾기 회사 이름에 대한 퍼지 일치는 자동 완성 시스템에서 일반적인 작업입니다. 이 작업은 잠재적으로 일치하는 회사가 많고 효율적인 검색 알고리즘이 필요하기 때문에 어려울 수 있습니다.
Soundex Indexing
퍼지 일치에 대한 한 가지 접근 방식은 Soundex를 사용하는 것입니다. 인덱싱. Soundex는 발음을 기반으로 단어를 인코딩하는 음성 알고리즘입니다. 이를 통해 철자가 다른 경우에도 단어를 대략적으로 일치시킬 수 있습니다. 그러나 Soundex 인덱싱에는 긴 문자열을 구별할 수 없고 첫 글자가 동일해야 하는 등의 한계가 있습니다.
Levenshtein Distance
더 발전된 접근 방식 퍼지 매칭은 Levenshtein 거리를 사용합니다. Levenshtein 거리는 한 문자열을 다른 문자열로 변환하는 데 필요한 삽입, 삭제 또는 대체 횟수를 측정합니다. Soundex와 달리 이 방법에는 앞서 언급한 단점이 없습니다.
PHP에서 Levenshtein Distance 사용
codejanitor.com 웹사이트는 MySQL 저장 함수의 예를 제공합니다. Levenshtein 거리를 계산합니다. 이 기능을 사용하면 다음과 같이 회사 이름에 대한 퍼지 일치를 수행할 수 있습니다.
// Load MySQL stored function (if not already loaded) if (!function_exists('Levenshtein')) { $sql = "CREATE FUNCTION Levenshtein(s1 VARCHAR(255), s2 VARCHAR(255)) RETURNS INT BEGIN DECLARE lv_s1, lv_s2 VARCHAR(255); DECLARE lv_len1, lv_len2, lv_i, lv_j, lv_c, lv_cost INT; DECLARE lv_arr1[255] INT; SET lv_s1 = LOWER(s1); SET lv_s2 = LOWER(s2); SET lv_len1 = LENGTH(lv_s1); SET lv_len2 = LENGTH(lv_s2); -- Initialize the array SET lv_arr1[1] = 0; FOR lv_i = 1 TO lv_len1 DO SET lv_arr1[lv_i + 1] = lv_i; END FOR; -- Step 2 FOR lv_j = 1 TO lv_len2 DO SET lv_c = lv_j; FOR lv_i = 1 TO lv_len1 DO IF SUBSTRING(lv_s1, lv_i, 1) = SUBSTRING(lv_s2, lv_j, 1) THEN SET lv_cost = 0; ELSE SET lv_cost = 1; END IF; SET lv_c = LEAST(lv_c + 1, lv_arr1[lv_i] + lv_cost, lv_arr1[lv_i - 1] + 1); SET lv_arr1[lv_i] = lv_c; END FOR; END FOR; RETURN lv_c; END;"; $result = $mysqli->query($sql); } // Execute fuzzy matching query $numWords = 0; $userInput = "Microsift"; $query = "SELECT company_name, Levenshtein('$userInput', company_name) AS distance FROM companies ORDER BY distance ASC"; $result = $mysqli->query($query); // Display results while ($row = $result->fetch_assoc()) { $numWords++; echo $row['company_name'] . " (" . $row['distance'] . ")\n"; } if ($numWords == 0) { echo "No matches found.\n"; }
위 내용은 자동 완성을 위해 PHP를 사용하여 MySQL에서 퍼지 회사 이름 일치를 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!