Функция сравнения двух строк на PHP

Насколько похожи две строки? В PHP для выяснения подобия строк есть две функции — similar_text() и levenshtein().

Первая из них считает процент совпадения символов в двух строках, а вторая вычисляет расстояние Левенштейна — кол-во операций вставки, замены, удаления символов, приводящих одну строку к другой.

Время работы функции levenshtein очень быстро растет с ростом длины сравниваемых строк (как n³). Также установлена максимальная длина для строк — 255 символов. После вычисления требуется нормировка, чтобы можно было использовать результат вычислений для сравнения с другими результатами. А если вы переставите аргументы местами, то получите отличный от предыдущего результат.

Все эти факторы склоняют меня в сторону выбора функции similar_text. Она устроена более сложно, чем я упоминал ранее.

Пример работы:

А вот результаты сравнения других строк:

ac и ca — 50%;

AC и ac — 0%

aac и ac — 80%

abc и ac — 80%

caa и ac — 40%

cba и ac — 40%

vb ac и ac vb — 40%

vb ac и vc ab — 60%

Как видите, не так уж она прямолинейна и предсказуема. Для функции важен порядок слов и регистр букв. По умолчанию, она не работает с кириллицей и UTF8.

Давайте избавим функцию от этих недостатков.

Получившаяся функция strSimilar пренебрегает регистром букв, порядком слов и работает с UTF-8. Для этого требуется предварительная нормализация строк.

Алгоритм очень медленный и едва ли применим для реальных задач, где требуется выявить подобие строк.

Мало букафф? Читайте есчо !

Создание файла на Google Drive через API

Ноябрь 10, 2023 г.

Работа с API гугл - это ещё та головоломка, тут переплетены и вечно обновляемые версии API, не прозрачные процедуры авторизации и запутанная консоль разработчика. ...

Читать

Base Auth в PHP

Ноябрь 17, 2022 г.

Рассмотрим здесь вариации с выполнением base auth. Как оказывается из опыта работы с некоторыми API, они не являются эквивалентными. И одна форма запроса может не работать, в то время как другая будет выполняться. Задача следующая - получить содержимое ...

Читать

Измеряем скорость работы кода в PHP

Сентябрь 15, 2017 г.

Чтобы измерить скорость работы кода нужны две вещи - "код" и секундомер. Программный код у вас есть, а секундомер, оформленный в виде класса - можете взять здесь. Очень простой, основанный на функции microtime(), секундомер скрывает рутину по сохранению ...

Читать

Как пользоваться flock()?

Март 24, 2017 г.

Если вы решаете задачу конкурентного доступа к файлу (или какому то другому ресурсу) в PHP, и решили использовать flock() для этой цели, то вам понадобится верно представлять как работает механизм блокировки. Представим себе, что есть разные программные ...

Читать
 

Комментарии к «Функция сравнения двух строк на PHP»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: