Алгоритм фильтрации записей

5 000 руб. за проект • наличный расчёт, безналичный расчёт
09 июля 2018, 09:04 • 6 откликов • 48 просмотров
Описание данных для фильтрации:
Есть список банковских операций, в файле .xlsx 114 тыс. строк вида (первый столбец - MCC-код операции, второй столбец наименование ретейлера):

9399 YANDEX.FINES
9399 YANDEX.MONEY
9399 YANDEX.MONEY
9399 ZOOPARK 2
9399 indianvisaonlineSBIePa
9399 oplatagosuslug.ru
9399 oplatagosuslug.ru
9402 RED
9402 BELPOST OPS-12
9402 BELPOST OPS-39
9402 DHL.POSTAL SERVICES
9402 DOROZH.SBORY PST
9402 GOMEL' 149402GOS-2
9402 IP IVANOV O.A.
9402 LA POSTE L755170 75 PA
9402 LPTUS-LYUBERTSY-10
9402 LPTUS-LYUBERTSY-3
9402 LYUBERTSY-13
9402 LYUBERTSY-7
9402 LYUBERTSY-9
9402 MINSK 101
9402 OPS-1
9402 OPS-39 PST
9402 OPS-49
9402 OPS-53
9402 PODPISKA POCHTA RF
9402 POST RUS.SERVICE.109147
9402 POST RUS.SERVICE.109384
9402 POST RUS.SERVICE.10950

Нужно отфильтровать строки и оставить только уникальные наименования:

9399 YANDEX.FINES
9399 YANDEX.MONEY
9399 ZOOPARK
9399 indianvisaonlineSBIePa
9399 oplatagosuslug.ru
9402 RED
9402 BELPOST OPS
9402 DHL.POSTAL SERVICES
9402 DOROZH.SBORY PST
9402 GOMEL
9402 GOS
9402 IP IVANOV O.A.
9402 LA POSTE L755170 75 PA
9402 LPTUS-LYUBERTSY
9402 LYUBERTSY
9402 MINSK
9402 OPS
9402 PODPISKA POCHTA RF
9402 POST RUS.SERVICE

В последствии база будет использоваться для поиска логотипов к отфильтрованным организациям.

Задача:
Необходимо разработать модуль/класс, принимающий на вход массив объектов с тремя полями: ID, MCC, название ретейлера и возвращающий отфильтрованный массив объектов.

Описание логики фильтрации:
Внимание! Данный список не является конечным. Могут быть добавлены дополнительные фильтры.

  1. Удалить повторяющиеся наименования (повторяется и MCC-код и название ретейлера)
  2. Удалить всех ИП-шников (пример: "IP LITVINOVA L.N.")
  3. Удалить близкие по наименованию ретейлеры (MCC-код совпадает, отличия в одной-двух буквах или символах). Пример возможных значений: "VETERINARNAYA SLUZBA 1", "VETERINARNAYA SLUZHBA"
  4. Удалить близкие по наименованию ретейлеры (MCC-код совпадает, отличие в конце названия или в начале, но не по средине). Пример возможных значений: "BOUCHERIE DU MA", "BOUCHERIE DU MARCHE" или "RADIOSPICK.COM* ", "RADIOSPICK.COM* Te", "RADIOSPICK.COM*Teste", "RADIOSPICK.COM*Teste"
  5. Удалить ретейлеров с абстрактными названиями, вроде "UNITED", "UNIVERS", "DELTA", "DESK", "KASSA" и так далее.
  6. Удалить ретейлеров с различиями в улице, стране. Должна быть один "HILTON". Пример возможных значений: "HILTON BEIJING WANGF", "HILTON PRAGUE", "HILTON ST. PETERSBURG"
Должна быть возможность настраивать (отключать) фильтры.