Проверка на подобие строк в PHP

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

У таких заказов уже был установлен стутус «в чёрный список» и осталось только взять информацию о заказчике.  Естественно дублирующуюся информацию сразу удалял. Но тут возникла небольшая проблема.   Например:

Иванов Иван Иванович Москва ленина 7-220/1 test@mail.ru

Иванов Иван Иванович г.Москва ленина 7-220/1 test@mail.ru

Иван Иванов Иванович г.Москва ленина 7-220/1 test@mail.ru

При каждом заказе клиент не всегда вводил данные как хотелось бы. Менял местами имя, фамилию, добавлял к названию города «г.» и так далее, в результате в отобранных записей есть по сути дубликаты, не полностью соотвествующие, но дубликаты. Но нам они не нужны, так как итоговый чёрный список будет более длинным, будет лишняя информация.

Для того чтобы убрать дубликаты я воспользовался функцией similar_text, которая вычисляет количество совпадающий символом и процент соответствия

int similar_text ( string $first , string $second [, float &$percent ] )

доступна в PHP 3>

возвращает количество совпавших символов

$first — первая строка

$second — вторая строка

$percent — опциональный параметр, передаваемый по ссылке, в него будет записан процент соответсвия.

К примеру для первой и второй строки совпало 55 из 57(длина самой длинной строки) символов, процент соответствия — 98,214285714286

Для первой и третьей строки совпало 50 из 57(длина самой длинной строки) символов, процент соответствия — 89,285714285714

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

Функция similar_text() определяет схожесть двух строк по алгоритму Оливера.

Перед проверкой для подобности приводил к нижнему регистру, удалял пробелы по краям, удалял повторяющиеся пробелы:

Рубрики: PHP
Теги: PHP, similar_text
Понравилось? Поделись с другими плз












Комментарии ВКонтакте





Комментарии с сайта
  1. йцуйцу:

    Спасибо большое пригодится!

  2. Функция в чем-то и полезная, для поиска, но все-равно потом вручную проверять необходимо. В MySQL 5 есть функции поиска например MATCH, которые могли бы помочь решить вопросы поиска.


Ответить Юрий

*