1. Есть три прайса от разных поставщиков (в будущем может быть больше).
2. В каждой два столбца: название товара и цена. Примерно 10 000 позиций.
3. Во всех таблицах есть одни и те же товары, но названия отличаются. Например: в одной «шоколадка марс», в другой «марс шоколад», или «смартфон iphone6» и «телефон i phone 6». То есть как перестановка слов, так и пробелы, сокращения и прочее.
Задача: найти одинаковые товары и проставить им единый идентификатор во всех трёх таблицах. Проблема: как максимально точно определить совпадения?
Как я думаю можно это решить: берём за основу одну таблицу и ищем совпадения в других таблицам по словам (с перестановкой букв и совпадением до n числа букв, но цифры не трогаем). Плюс используем цены, как критерий совпадения, то есть задаём порог: не должна отличаться более, чем, допустим, на 100 рублей.
Или считать процентное отклонение, по словам и по цене.
Это реально? Или можно проще, и я заморочился? Может есть готовые решения?
А конечная цель такая: в интернет-магазине на WP обновлять ценники на меньший из всех прайсов.
Если придётся заказывать скрипт/плагин у программиста, какой может быть примерный ценник? Если делать по существу (это как-будто ML) и возможностью подгружать дополнительные прайсы.
В дополнение ко всему - я бы посоветовал к артикулам добавлять идентификатор поставщика. Т.е. шоколадка у всех с артикулом 123, так вот дешевле у поставщика 1, идентификатор у него А. Значит в каталог заносить шоколадку с артикулом А123, чтобы потом сразу знать, у какого поставщика её закупать.
Antonio Solo, если только поставщики поставляют какого то ноунейм товар, а так артикул - это "уникальный идентификатор товара" который не может отличатся у разных поставщиков так как составляется по определенным правилам заводом изготовителем. Пример: MacBook MF839 (артикул), его артикул нигде не будет отличатся, во всех магазинах/прайсах будет идентичный.
реально, но адски сложно. прайсы поставщиков это хаос. полгода решали эту задачу, мб когда-нибудь в сервис превратим. тема востребованная, но из готовых решений ничего эту задачу не решает даже на половину. точнее эта тема уже даже не востребованная так как все привыкли к тому что она нерешаемая
Думаю любой алгоритм будет давать ошибку
Как вариант: Удалить все пробелы и не цифро-буквенные символы, привести к одному регистру и сложить коды символов. Получится слабое подобие хэша. таким образом можно найти все совпадения вне зависимости от перестановки слов. Если в позициях будет "шоколад" и "шоколадка", то этот метод покажет несовпадение. Для учета и этого различия, можно запустить предварительную авто-замену однокоренных слов на какое-то определенное значение.
Ну и дальше можно разные авто-замены придумывать, для приближения к идеалу.
Но вероятность ошибки все равно остается.
1) прогнать и слить строгие совпадения
2) для нестрогих совпадений сделать "склейщик" - автоматизированное рабочее место для просмотра и построения связей 10000 немного.