Расстояние редактирования SQL: Как вы обрабатывали сопоставление нечетких строк с использованием SQL в прошлом?

#sql #sql-server

#sql #sql-server

Вопрос:

Я всегда хотел узнать ваше мнение по этой теме, так что приступаем:

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

 My_List.Customers_Name         Customers_Database.Customers_Name
-                              -
Charles Schwab                 Charles Schwab Corporation
  

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

Какие правила / фильтры вы применяете к результатам сопоставления нечетких данных, чтобы уменьшить количество сопоставлений вручную?

Я ссылаюсь на правила типа: Если строка содержит более 20 символов и расстояние редактирования <= 1, то, вероятно, оно будет таким же, поэтому считайте это совпадением. Если строка содержит менее 4 символов, а расстояние редактирования > 0, то, вероятно, это будет другая учетная запись, поэтому считайте это несоответствием.

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

Если нет, не могли бы вы рассказать о своем опыте и о том, как вы справлялись с этим раньше?

Большое вам спасибо

Ответ №1:

Я делал это несколько раз. Это сильно зависит от наборов данных, и правила меняются каждый раз.

Мой процесс:

  • выберите случайный набор выборочных записей, чтобы проверить мой набор правил — достаточно большой, чтобы быть репрезентативным, достаточно маленький, чтобы иметь возможность визуально сканировать.
  • создайте таблицу «соответствие» со столбцами «оригинал», «соответствие» и «оценка достоверности».
  • напишите правила в виде инструкций «insert» или «update» для создания записей в таблице «match»
  • запустите правила для моего образца набора данных
  • оцените совпадения в образцах. Настраивайте правила, добавляйте их.
  • промыть и повторить

«Правила» сильно зависят от набора данных. Обычно я использую следующее:

  • уберите знаки препинания
  • примените обычные замены (например, «Corp» становится «Корпорацией»)
  • разделите на отдельные слова; применяйте долю каждого точного совпадения из 10 (таким образом, соответствие «Charles Schwab» «Корпорации Charles Schwab» составило бы 2/3 = 7 баллов, соответствие «HSBC» «HSBC» составляет 1/1 = 10 баллов
  • разделите на отдельные слова; применяйте долю каждого близкого совпадения из 5 (таким образом, соответствие «Chls Schwab» «Charles Schwab Corporation» будет равно 2/3 = 3 баллам, соответствие «HSBC» «HSCB» равно 1/1 = 5 баллам).