Нечеткий поиск в PHP с процентами: подробное руководство

Нечеткий поиск – это мощный метод, используемый для поиска приблизительных совпадений для заданной строки запроса. Это обеспечивает более гибкий поиск, который позволяет обрабатывать опечатки, орфографические ошибки и варианты поисковых запросов. В этой статье мы рассмотрим различные методы реализации нечеткого поиска в PHP, а также приведем примеры кода.

  1. Расстояние Левенштейна:
    Алгоритм расстояния Левенштейна вычисляет минимальное количество изменений (вставок, удалений или замен), необходимых для преобразования одной строки в другую. Его можно использовать для измерения сходства между двумя строками и реализации нечеткого поиска.
function fuzzySearchLevenshtein($query, $strings, $threshold) {
    $results = [];
    foreach ($strings as $string) {
        $distance = levenshtein($query, $string);
        $similarity = 100 - ($distance / max(strlen($query), strlen($string))) * 100;
        if ($similarity >= $threshold) {
            $results[] = $string;
        }
    }
    return $results;
}
  1. Похожий текст:
    Функцияпохожий_текст() вычисляет сходство между двумя строками, используя алгоритм косинусного сходства. Он возвращает количество совпадающих символов в обеих строках в процентах.
function fuzzySearchSimilarText($query, $strings, $threshold) {
    $results = [];
    foreach ($strings as $string) {
        similar_text($query, $string, $similarity);
        if ($similarity >= $threshold) {
            $results[] = $string;
        }
    }
    return $results;
}
  1. Soundex:
    Функция soundex() преобразует строку в четырехсимвольный код, представляющий ее английское произношение. Его можно использовать для поиска слов со схожим звучанием.
function fuzzySearchSoundex($query, $strings) {
    $results = [];
    $querySoundex = soundex($query);
    foreach ($strings as $string) {
        if (soundex($string) == $querySoundex) {
            $results[] = $string;
        }
    }
    return $results;
}
  1. Использование регулярных выражений.
    Регулярные выражения можно использовать для реализации нечеткого поиска путем определения шаблонов, соответствующих похожим строкам. Для выполнения сопоставления можно использовать функцию preg_match().
function fuzzySearchRegex($query, $strings) {
    $results = [];
    $pattern = '/'.implode('.*', str_split($query)).'/i';
    foreach ($strings as $string) {
        if (preg_match($pattern, $string)) {
            $results[] = $string;
        }
    }
    return $results;
}

В этой статье мы рассмотрели несколько методов реализации нечеткого поиска в PHP. Алгоритм расстояния Левенштейна, подобные_текст(), soundex() и регулярные выражения — все это мощные инструменты, которые можно использовать для достижения функциональности нечеткого поиска. Включив эти методы в свои PHP-приложения, вы сможете улучшить качество поиска и более эффективно обрабатывать приблизительные совпадения.

Не забывайте экспериментировать с различными методами и корректировать пороговые значения в соответствии с вашими конкретными требованиями. Нечеткий поиск может значительно повысить удобство использования и точность поиска в ваших проектах PHP.