> 데이터 베이스 > MySQL 튜토리얼 > 자동 완성을 위해 PHP를 사용하여 MySQL에서 퍼지 회사 이름 일치를 어떻게 구현할 수 있습니까?

자동 완성을 위해 PHP를 사용하여 MySQL에서 퍼지 회사 이름 일치를 어떻게 구현할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-14 16:52:11
원래의
197명이 탐색했습니다.

How can I implement fuzzy company name matching in MySQL with PHP for auto-completion?

자동 완성을 위한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿