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

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

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

PHP код для калькулятора боёв Dragons of Atlantis

Июль 3, 2012 г.

Выкладываю php код, по просьбе Blagtoof. Забавно, что это кому то может быть нужно. :) А мне не жалко. Забросил по понятным причинам саму игру. Скачать как файл (download php code as text file). [crayon-69d0bf12dbaee921674207/]

Читать

Если simplexml "не парсит" атрибуты...

Август 12, 2017 г.

.. то скорее всего, вы ошибаетесь. Рассмотрим следующий пример XML. В документе example.xml содержится запись о валюте и информация о категории товара. Обе записи содержат аттрибуты. [crayon-69d0bf12dbf15051437052/] Выполним чтение и вывод информации ...

Читать

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

Март 24, 2017 г.

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

Читать

Антиспам с использованием Javascipt для WordPress, обходимся без Captcha

Апрель 12, 2013 г.

О сути метода я рассказываю здесь - Бегство от спама. Для работы понадобится hook на новые комментарии - pre_comment_approved, который мы объявим в файле темы - function.php. Если в вашей теме нет такого файла - создайте :). Нужно модифицировать всего ...

Читать
 

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

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



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