Функция сравнения двух строк на 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. Для этого требуется предварительная нормализация строк.

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

Написать комментарий

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

Публикация в Twitter средствами API (размещение текста, ссылки, картинки)

Апрель 11, 2013 г.

Да, представьте себе, у этой "пижни" есть свой API! Раньше им пользоваться было намного проще, не было этих наворотов с OAuth. Не смотря на мое личное ...

Читать

Конструктор класса в PHP и его перегрузка

Январь 26, 2016 г.

В версии PHP 5 мы получили возможность использовать конструктор класса, специальную функцию, объявляемую в классе, которая служит для инициализации экземпляра объекта. К сожалению, конструкторы, как и остальные методы класса в PHP, не могут быть "перегружены". ...

Читать

 

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

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



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