сравнения списков

baracuda

Client
Регистрация
19.06.2013
Сообщения
793
Благодарностей
278
Баллы
63
Всем привет.

Не могу придумать способ определять "похожесть".

есть списки 10000 штук в каждом списке по 100 значений id(пример 270358475, 280300221, 260302911 и.т.д.)

других привязок нет.

где-то список может отличатся на 1id где-то на 50id где то на 99id

начало списка, может быть прям один в один похоже, 10-15-20 значений к концу списка может сильно начать различаться.

Хочу как-то эти списки разделить на группы. по похожести.

Может кто-то делал уже такое. Заранее благодарю на наводку или решение.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Могу разве что подсказать как отсортировать списки где наиболее уникальные строки относительно тех где много общих строк:

1. Все строки списков в 1 файл. Дубли не удаляем, будет что-то типа:
Код:
строка 1
строка 2
строка 3
строка 3
строка 3
строка 4
строка 4
2. Прогоняем файл шаблон Группирование строк по популярности Csharp.zp (прикрепил к посту). Он покажет какие строки наиболее часто встречаются:
В таблице во второй колонке количество встреч строки в общем файле. Вот это как раз будет наш «бал популярности».
шаб на зенопостере, на вход подаем текстовик с дублями, на выходе получаем ексель таблицу где во втором столбце количество строк в файле таких, а в третьем их процентное соотношение.
116294
116293


3. Клепай свой шаб, который берет твой список, и формирует с него таблицу на 2 столбца, где в первом столбце оригинальная строка, а во втором столбце ее «бал популярности» (дергаем этот бал для каждой строки из второй колонки таблицы предыдущего шаба, предварительно сделав поиск по таблице по первому столбцу).
В конце шаблона для каждого списка суммируем значения во втором столбце и делим его на количество строк списка. Хотя раз они у тебя одинаковые, то деление можно пропустить.
Чем выше полученный результат, тем больше в списке «популярных строк», тем он более похож на других. Чем меньше показатель, тем список уникальное.
Хотя результат будет искажен чуть если в списке есть строка с очень большим показателем популярности. Тогда можно вручную в таблице подправить «балы популярности», например где «1» поставить «0», а где все что «>=2» поставить «1». Тогда сразу будет понятно, что если в спике в сумме "100" балов, то в нем 100 строк которые есть и в других списках, а если "0", то список полностью уникален.
 

Вложения

  • Спасибо
Реакции: baracuda

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)