Как кластеризовать/группировать повторяющиеся объекты клиентов в моем списке на основе электронной почты ИЛИ мобильного C#

Место общения программистов C#
Ответить
Anonymous
 Как кластеризовать/группировать повторяющиеся объекты клиентов в моем списке на основе электронной почты ИЛИ мобильного

Сообщение Anonymous »

В моем текущем проекте на C# мне поручено получить сведения о клиентах из источника данных, «очистить» этих клиентов (убедиться, что имя написано правильно, правильно отформатировано для мобильных устройств и т. д.), а затем найти повторяющиеся контакты и сгруппировать их. После группировки данные отправляются в другой источник, где он обрабатывает объединение повторяющихся клиентов.
Мне удалось получить и очистить клиентов, но теперь я застрял в вопросе как мне следует находить и группировать дубликаты. Дубликаты определяются как объекты клиентов, которые имеют:
  • один и тот же мобильный телефон
    ИЛИ
  • один и тот же адрес электронной почты
Например, возьмем следующие фиктивные данные (которые хранятся в List, и каждый объект является клиентом). объект):
Объект 1

FName: Taylor

LName: Doe

Электронная почта: (пусто)

Мобильный телефон: 0400111222
Объект 2

FName: (пусто)

LName: Доу

Электронная почта: t.doe@gmail.com

Мобильный телефон: (пусто)
Объект 3

FName: Джон

LName: Смит

Электронная почта: john.smith@gmail.com

Мобильный телефон: 0400999888
Объект 4

FИмя: Тейлор

LИмя: Доу

Электронная почта: t.doe@gmail.com

Мобильный телефон: 0411222333
Объект 5

FИмя: Джо

LИмя: Смит

Электронная почта: john.smith@gmail.com

Мобильный телефон: 0400999887
Объект 6

FName: (пусто)

LName: (пусто)

Электронная почта: taylor.d@gmail.com

Мобильный телефон: 0400111222
Объект 7

FName: Тейлор

LName: Доу

Электронная почта: taylor.d@gmail.com

Мобильный телефон: 0411222333
Объект 8

FИмя: Джейн

LИмя: Джонсон

Электронная почта: jj@gmail.com

Мобильный телефон: 0400789789
Алгоритм должен группировать объекты 1, 2, 4, 6 и 7 вместе, поскольку существует общий адрес электронной почты ИЛИ общий мобильный телефон, который связывает их вместе. Объекты 3 и 5 должны быть сгруппированы вместе, так как у них есть общий адрес электронной почты, а у объекта 8 не обнаружено дубликатов.
Все остальные параметры, такие как имя и фамилия, игнорируются, поскольку при просмотре данных клиенты довольно часто пишут свои данные с ошибками. Первоначально система, в которой хранятся эти данные, не заставляла клиентов вводить информацию, поэтому у некоторых контактов отсутствуют имена, адреса электронной почты или мобильные телефоны (именно поэтому мы рассматриваем мобильную электронную почту ИЛИ, а не мобильную И электронную почту). В какой-то момент это было обновлено, чтобы гарантировать, что оба поля заполнены, но в старых контактах с клиентами данные по-прежнему отсутствуют.
Как лучше всего это сделать? Важно отметить, что при первоначальном извлечении данных из источника будет создано около более 46 000 клиентов, которых необходимо отсортировать.
Конечный формат группировки в настоящее время не определен - будь то список объектов, хэш-набор, словарь и т. д., это не имеет особого значения. Какой бы алгоритм ни работал, мы можем настроить другие процессы для считывания результата.
Основываясь на некоторых быстрых исследованиях, я думаю, что иерархическая кластеризация может быть вариантом... Может ли кто-нибудь потенциально дать некоторое представление о том, с чего лучше всего начать? Просто немного теряюсь, в каком направлении смотреть.
Спасибо! :)

Подробнее здесь: https://stackoverflow.com/questions/798 ... email-or-m
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»