← Все курсы · Курс SQL

Нечеткие совпадающие имена: когда два написания относятся к одной и той же компании

Майкл Носито · Обновлено в августе 2026 г. · Все числа на этой странице были обработаны до их публикации.

ООО "Акме", АКМЕ ЛИМИТЕД, ACME LTD. и ООО "Акме", торгующие как Акме. Четыре строки, один клиент, четыре отдельных итоговых показателя и отчет о доходах, который ставит вашего крупнейшего клиента на четвертое место.

Что вы делаете: работаете по лестнице в порядке. Стандартизируйте, затем точное совпадение, затем заблокируйте, затем забейте. Большинство людей начинают с подсчета очков, который является дорогостоящим и приводит к наибольшему количеству ложных слияний.

Краткая версия. Очистка превращает большинство нечетких задач в точные, а точное сопоставление не может привести к ошибке.

Этап 1: стандартизировать

Один проход по полю, применяющий одни и те же преобразования к обеим сторонам:

ШагДопосле
Верхний регистрООО "Акме"ACME LTD
Удалить пунктуациюACME LTD.ACME LTD
Свернуть пространстваACME  LTDACME LTD
Нормализовать юридические суффиксыACME LIMITEDACME LTD
Полностью удалить суффиксACME LTDACME
Полосатые акцентыКРАСНЫЙ КОФЕCAFE ROUGE
-- SQL, one expression at a time so each step is visible
UPPER(TRIM(REPLACE(REPLACE(name, '.', ''), ',', '')))
# pandas
s = (df['name'].str.upper()
       .str.replace(r'[^\w\s]', '', regex=True)
       .str.replace(r'\b(LIMITED|LTD|PLC|INC|LLC)\b', '', regex=True)
       .str.replace(r'\s+', ' ', regex=True)
       .str.strip())

Сохраняйте стандартизированное значение в новый столбец. Никогда не перезаписывайте оригинал: оригинал — это то, что вы показываете человеку во время просмотра, и это единственный способ впоследствии объяснить слияние.

Этап 2: точное соответствие стандартизованному значению

Присоединяйтесь к очищенной колонке и посмотрите, сколько осталось. В названиях компаний это обычно решает подавляющее большинство вопросов, поскольку большая часть различий связана с пунктуацией, регистром и юридическим суффиксом, а не с настоящей орфографической ошибкой. Все, что здесь совпадает, является достоверным, и это причина сделать это, прежде чем что-то умное.

Этап 3: блокируйте, чтобы подсчет очков был доступен

Сравнение 10 000 имен друг с другом составит 49 995 000 пар. Блокировка означает сравнение только строк с общим дешевым ключом, поэтому вы никогда не формируете большую часть этих пар:

Блокировка первых трех символов разбивает список на сотни небольших групп, и количество сравнений падает на порядки. Цена состоит в том, что пара, первые три символа которой различаются, никогда не сравнивается, поэтому используйте два разных блокирующих ключа и объединяйте результаты.

Этап 4: забить то, что осталось

МераХорошо вСлабый в
Расстояние ЛевенштейнаОпечатки и односимвольные опечаткиПорядок слов, сокращения
Яро-ВинклерИмена, которые согласуются в началеДлинные строки, изменение порядка
Коэффициент набора токеновПереупорядоченные слова, дополнительные словаРазные слова означают одно и то же
Саундекс, МетафонЗвукоподобное написание имен людейВсе нефонетические и неанглийские имена.
Сходство триграммОбщий текст, встроенный в ПостгресОчень короткие струны

В Постгресе pg_trgm дает тебе similarity(a, b) и индекс, который делает его пригодным для использования. В Python, rapidfuzz является текущим стандартом и достаточно быстр, чтобы просмотреть заблокированный список на ноутбуке. В Excel нет встроенной функции нечеткого сопоставления, но в Power Query есть опция нечеткого сопоставления при слиянии с настраиваемым порогом сходства, что является практическим путем для одноразового сопоставления.

Два порога, а не один. Выше 0,95 происходит автоматическое слияние. Ниже 0,85 отклоняйте. Между ними смотрит человек. Эти цифры являются отправной точкой для калибровки, а не правилом: пометьте вручную 100 пар и посмотрите, где расходятся ваши собственные данные.

Ложные слияния, которых следует ожидать

Нечеткое сопоставление заведомо неверно именно в тех случаях, когда это имеет значение:

Защита – это второе поле. Никогда не объединяйтесь только по имени: требуйте соглашения по почтовому индексу, регистрационному номеру, домену или номеру телефона. Одно дополнительное поле резко снижает частоту ложных слияний, поскольку две записи, случайно согласующиеся в двух полях, встречаются редко.

Запись того, что вы сделали

Для каждого слияния требуется строка в таблице перекрестных переходов: идентификатор источника, идентификатор цели, оценка, метод, дата и кто его утвердил. Без этого слияние будет необратимым и необъяснимым, и когда кто-то впервые спросит, почему два клиента стали одним, вы будете реконструировать его по памяти.

Как применить это в своей работе

  1. Стандартизируйте новый столбец и измерьте, сколько дубликатов разрешается в одиночку. Сообщите об этом числе; обычно это большинство.
  2. Не забивайте ничего, пока не заблокируете. Это разница между секундами и часами.
  3. Выберите второе поле, по которому требуется соглашение перед слиянием.
  4. Пометьте 100 пар вручную, чтобы установить пороговые значения. Это занимает час, и это единственный способ узнать, что ваши цифры что-то значат.
  5. Держите пешеходный переход. В этом разница между решением и несчастным случаем.

Единственная привычка, которую нужно сохранить

Просмотрите образец автоматического слияния, а не только неопределенную полосу. Слияния с высокой степенью достоверности — это те, на которые никто не смотрит, и именно поэтому ошибки там сохраняются дольше всего.

Как бы вы отменили последнее автоматическое слияние в таблице клиентов?

Каждый номер здесь был обработан до того, как был опубликован. Все пары по 10 000 строк — это 10 000 х 9 999/2 = 49 995 000 сравнений, и именно этого и следует избегать, чтобы избежать блокировки.
Две строки, обозначающие одну и ту же компанию, и две строки, обозначающие разные компании, в сумме выглядят одинаково.

SQL для аналитиков — это 458 страниц, которые считывают запросы построчно в повседневных словах, поэтому ошибочный результат нужно где-то отслеживать, а не перепечатывать, пока он не станет выглядеть лучше.

SQL для аналитиков, 19 $ →
Это разрешение сущности, по одному полю за раз.

Разрешение объекта это полный метод, дедупликация списка клиентов это прикладная версия, и Согласование количества строк проверяет результат.

Прочитать разрешение объекта →