#realJSOP Ответов: 1

Нормализация имен людей в SQL 2008R2


У меня есть база данных с полем "полное имя", которое может содержать следующее содержимое:
SMITH, J
SMITH, JOHN
SMITH, JOHN M
SMITH, JOHN MATHEW
SMITH, JOHN MATHEW MAJ
SMITH, J M MAJ
SMITH,J
SMITH,JOHN
JOHN M SMITH
JOHN MATHEW SMITH
JOHN MATHEW SMITH MAJ
SMITH J

В другой базе данных есть поле полного имени, которое будет содержать один из двух следующих форматов (но только один из них)
SMITH,JOHN
SMITH,JOHN M
SMITH,JOHN MATHEW

Мне удалось "нормализовать" различные форматы в первой базе данных так, чтобы по крайней мере каждая вещь выглядела так:
SMITH,J
SMITH,JOHN
SMITH,JOHN M
SMITH,J M

и все во 2-й базе данных к этому (опять же, это будет одно или другое в зависимости от того, есть ли у человека отчество, указанное в этой таблице):
SMITH,JOHN M
SMITH,JOHN

Когда я соединяю таблицы по полям полных имен, я получаю высокую степень совпадений, но в то же время есть умеренно значительное количество не совпадений (как вы можете догадаться).

Моя новая проблема заключается в следующем - как лучше всего попытаться автоматически определить, как массировать все (или как можно больше) имен в первой таблице до версии, используемой во 2-й таблице.

Как я понял, единственные имена, которые могут быть массированы, - это те, которые ближе всего к имени во 2-й таблице, но как бы я сделал это в SQL?

Это сопоставление было бы намного проще, если бы они (источник импортированных данных) включали доступное числовое поле personID (которое существует во 2-й таблице) в данные, но они этого не делают, и мы еще не выяснили, могут ли они это сделать. Если они смогут и сделают это, вся эта работа будет напрасной.

Это потребовало значительного количества SQL для нормализации имен, насколько я дошел до этого момента, что включало в себя многочисленные использования REPLACE, TRIM, LEFT, RIGHT, и REVERSE, с умеренным посыпанием CASE WHEN для ровного счета.

Что я уже пробовал:

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

RedDk

Думая вне коробки, я бы предположил, что есть какая-то более серьезная причина для разработки метода ввода, который требует стадии проверки, такой как использование формы, в которой этот "пользователь" будет вынужден делать лучшие утверждения относительно того, какой может быть его личность.

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

#realJSOP

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

Я в аду...

1 Ответов

Рейтинг:
2

Patrice T

Привет Джон,

Цитата:
потому что это больше похоже на проблему нечеткой логики, чем на что-либо другое.

Я согласен с вами, есть степень угадывания, 100% совпадение невозможно, если не по короткому списку, где вы знаете точные реальные имена без дубликатов или почти дубликатов.
Проблемы:
- 2 человека могут иметь точно такое же имя.
- 2 человека с разными именами могут быть написаны одинаково. Смит, Джон Мэтью и Смит, Джон МАКС могут привести к Смиту, Джону м и быть неразличимыми.

Я думаю, что нет 100% точного решения вашей проблемы, используя только имя.


#realJSOP

Да, я знаю. От босса - "я знаю, что данные-дерьмо, поэтому мы сопоставляем то, что можем, и представляем информацию идиотам, которые ее ввели."

:)

Я не знаю, кто 1-голосовал за вас, но я бы хотел, чтобы ваш ответ компенсировал это.

Patrice T

Цитата вполне реалистична. :)
Спасибо