процент схожести данных

  • Автор темы Автор темы midnighter
  • Дата начала Дата начала

midnighter

Guest
процент схожести данных

Может кто сталкивался с задачкой:
в базе есть 5 полей, все текстовые. Записей в БД около 100000 как определять процент схожести добавляемых данных? скажем дабавленных напротяжении суток. Нужно как-то запрещать добавлять дубликаты, но делать это не просто через =.
сенкс.
 
процент схожести, дабы небыло дубликатов скажем
"требуется водитель".
"водитель требуется".
все остальные поля одинаковы на 100% но это дубль.
 
Сначала попробуй дать четкое объяснение - что в твояей задаче явдяется дубликатом.
 
Если процент схожести скажем больше 90% это дубль, задачка то и стоит как определить 90%. я раньше видел алгоритмы такие но что-то туго сейчас.
 
работает на ура

int similar_text ( string first, string second [, float &percent] )
 
супер конечно но как это дело к БД привязать? брать по одной записи будет долго и медленно.
 
1. делаешь конкатенацию всех текстовых полей.
2. разбиваешь это все в массив по пробельным символам (\s)
3. удаляешь из массива все что не является словами
4. ( по желанию ) удаляешь все короткие слова
5. (по желанию) удаляешь 2-3 символа с конца каждого слова
6. (по желанию) удаляешь дублирующие слова (может это вообще не надо)
7. делаешь сортировку массива
8. объединяешь массив по пробелу (implode(' ', $array))
9. приводишь текст к одному регистру (strtolower)
10. Делаешь md5 от полученной строки.

Для похожих текстов будут одинаковые хеши

В таблицу добавляешь поле unique_hash и строишь по нему уникальный индекс.
 
Для похожих текстов будут одинаковые хеши
Вот с этой фразой не согласен.
Любое добавление слова в текст2, которого нет в текст1 делаем хеши абсолютно разными.

Что бы я сделал:
шаг +1 переводим полученный после обработки массива текст в транслит
шаг +2 для транслитирированного текста запускаем metaphone и записываем данное поле в базу
шаг +3 навешиваем на metaphone fulltext индекс и при добавлении статьи смотрим на релевантность индекса
 
Сверху