Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Группировка записей по "похожести" / 5 сообщений из 5, страница 1 из 1
09.11.2005, 13:44
    #33368854
Legka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка записей по "похожести"
Всем привет!
Есть таблица со списком продуктов от разных мерчантов (merchant_products): наименование, цена, категория (как ее обозначил мерчант). И в этой таблице такого рода записи:

merchant_products
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
id  | name                  | price  | category         | product_id
---------------------------------------------------------------------
45  | Shampoo "Super"       |  8.99  | Health & Care    | NULL
46  | Super shampoo 8 oz    |  7.99  | Hair care        | NULL
47  | Super shampoo - 8 oz  |  9.99  | Skin care        | NULL
48  | Super Shampoo         | 10.50  | Health & Beauty  | NULL
49  | Super shampoo         | 28.00  | Beauty and Care  | NULL

Задача состоит в том чтобы распознать одинаковые продукты. А именно рассчитать вероятность того, что часть этих продуктов - один и тот же продукт. При значении расчитанной вероятности выше какого-либо значения (к примеру 90%) система принимает решение самостоятельно, в противном случае требует вмешательства оператора.

В результате должна быть сформирована таблица products (id, name), и "распознанные" продукты должны ссылаться на соответствующую запись в таблице products.

Имеем N параметров сравнения (name, price, category, и т.д.). Каждому параметру назначаем некий условный "вес", который определяет значимость параметра при сравнении. Например у названия продукта больше вес чем у категории.

При сравнении численных параметров (цены например) особых проблем нет. Но как определить насколько отличаются (насколько похожи) строки:
Super shampoo - 8 oz и Super shampoo 8 oz ?
...
Рейтинг: 0 / 0
09.11.2005, 14:00
    #33368910
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка записей по "похожести"
Я думаю, что на основе этого можно построить алгоритм группировки.
...
Рейтинг: 0 / 0
09.11.2005, 14:48
    #33369080
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка записей по "похожести"
Legka Но как определить насколько отличаются (насколько похожи) строки:
Super shampoo - 8 oz и Super shampoo 8 oz ?
Есть такой алгоритм Soundex:

"Soundex" algorithm is standard Odell/Russell (1918):
*
* Produce a code of the form "letter, digit, digit, digit"
* using these rules:
*
* 1) Retain the first letter unchanged.
*
* 2) For each succeeding letter, produce a result based
* on the following table:
*
* letter result
*
* B, F, P, V digit 1
* C, G, J, K, Q, S, X, Z digit 2
* D, T digit 3
* L digit 4
* M, N digit 5
* R digit 6
* A, E, H, I, O, U, W, Y (nothing)
*
*
* 3) If two or more adjacent letters produce the same
* result in step 2, ignore all but the first of the
* adjacent letters.
*
* 4) Repeat steps 2 and 3 until three digits have been
* produced or until the source is exhausted.
*
* 5) If less than three digits were produced, right-fill
* with zeros.
*
*
* Notes:
*
* Non-alpha characters are ignored entirely; letters which
* are separated only by non-alpha characters are considered
* adjacent. If the source contains no alpha characters, a
* value of "0000" is returned.
*
* Case is not significant.
*
* Letters which produce (nothing) in step 2 are still
* significant with respect to step 3. That is, two letters
* which produce the same digit are not considered adjacent
* if they are separated by a letter that produces (nothing).
* This is in accordance with the original algorithm.
*
...
Рейтинг: 0 / 0
10.11.2005, 09:40
    #33370280
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка записей по "похожести"
...
Рейтинг: 0 / 0
10.11.2005, 12:05
    #33370767
Legka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка записей по "похожести"
Всем большое спасибо за пищу для размышлений. Будем копать.:)

to Станислав C.:
Насчет алгоритма Soundex. В Oracle есть его реализация в виде одноименной фнукции.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select soundex('John Doe'), soundex('Jon - Dow') from dual;
SOUN SOUN
---- ----
J530 J530

select soundex('John Doe'), soundex('Doe, John') from dual;
SOUN SOUN
---- ----
J530 D250

Для отдельных слов или коротких фраз с одинаковым порядком слов работает "на ура". А в общем случае скорее всего прийдется бить на слова.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Группировка записей по "похожести" / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]