![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
алгоритмы выборки похожих фио [D7, XP, 2003]
Дмитрий © (2015-04-17 18:43:00)Имеется таблица Персонал связанная с таблицей Предприятия.
Появилась потребность сохранять личные координаты контактов и бонусы при смене места работы
Добавили таблицу Персоналии с личными телефонами и бонусами.
Тут же возникла проблема- при добавлении новой записи в персонал требуется определить не существует ли такая личность в Персоналиях.
Во избежание многократного дублирования.
Какие существуют алгоритмы выборки похожих лиц, включая возможные ошибки в написании имен и перестановки типа "Иван Иванов" и "Иванов Иван"?
Дмитрий (2015-04-30 19:25:00) [21]Наоборот
При отсутствии каких-либо совпадений, запись создается в Персоны, ссылка заносится в Персонал
При нечетком совпадении (или при любых совпадениях) - на решение оператору.
Юрий Зотов (2015-04-30 18:54:00) [22]> Если никаких совпадений не найдено, создается новая запись,
> ссылку на которую и помещаем в Персонал.
Это опасно. Допустим в БД - Миха Йлович, на входе - Миха Илович, а остальные атрибуты совпадают. То есть, это один и тот же человек, который при строгом сравнении будет продублирован и мы получим грязь в базе.
Я бы использовал нечеткое сравнение и автоматически создавал новую запись только при совпадении 100%, а если меньше - то на откуп оператору.
Дмитрий (2015-04-30 17:28:00) [23]
> Юрий Зотов © (30.04.15 14:35) [70]
> Недавно решал ту же задачу.Параметры
> поиска были разбиты на 2 группы - обязательные и необязательные.
> Результаты поиска получились в трех категориях:1. Полное
> соответствие (совпали все параметры)2. Частичное соответствие
> (совпали обязательные параметры, но не совпал хотя бы один
> необязательный).3. Не найдено (не совпал хотя бы один обязательный
> параметр).По категории 1 программа может сделать нужные
> действия автоматически. По категории 2 решение принимает
> оператор. По категории 3 не делается ничего.
Именно так, кроме п.3
Если никаких совпадений не найдено, создается новая запись, ссылку на которую и помещаем в Персонал.
Юрий Зотов (2015-04-30 15:24:00) [24]Нечеткое сравнение строк:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=722
Юрий Зотов (2015-04-30 15:17:00) [25]Вдогонку - и про TRIM не забываем, а то понагонят пробелов в БД...
Юрий Зотов (2015-04-30 15:14:00) [26]И что касается собственно поиска по ФИО.
1. В экранном интерфейсе есть птичка - различать Е и Ё, или не различать. Оператор ставит эту птичку как ему надо. Если не различать, то в тексте запроса к БД используем TRANSLATE (замена Ё на Е), а в параметрах запроса - ReplaceAll (та же замена). И в любом случае используем UPPER.
2. Жаль, конечно, что на входе атрибуты в ФИО могут меняться местами, но это можно обойти простым перебором (и искать сцепленное ФИО).
Допустим, на входе имеем: Мусик Пусик. Мы не знаем, где тут фамилия, где имя, а где отчество. Запрос примерно такой:
select ... from ... where
(LastName || FirstName || Patronymic) = 'МусикПусик'
or
(LastName || Patronymic || FirstName) = 'МусикПусик'
or
... -- остальные 4 варианта
Запрос, конечно, не самый лучший, но суть он показывает.
Юрий Зотов (2015-04-30 14:35:00) [27]> Дмитрий (29.04.15 18:33) [67]
> Меня вполне устроит показать оператору список записей уже
> зарегистрированных персоналей, схожих с создаваемой.
Недавно решал ту же задачу.
Параметры поиска были разбиты на 2 группы - обязательные и необязательные. Результаты поиска получились в трех категориях:
1. Полное соответствие (совпали все параметры)
2. Частичное соответствие (совпали обязательные параметры, но не совпал хотя бы один необязательный).
3. Не найдено (не совпал хотя бы один обязательный параметр).
По категории 1 программа может сделать нужные действия автоматически. По категории 2 решение принимает оператор. По категории 3 не делается ничего.
Такое решение всех устроило (да и возможно ли другое?). Надо только хорошо продумать критерии поиска (какие параметры обязательные, а какие - нет). И еще надо иметь в виду, что одна входная запись может породить не одну, а несколько выходных записей в категории 2.
Германн (2015-04-30 02:07:00) [28]
> Дмитрий (29.04.15 18:33) [67]
>
>
> > Труп Васи Доброго © (29.04.15 01:32) [52]
> > > Про какой бардак заявлял труп васи?Про полный. Если
> нет
> > формализации и ключа у "персонала", то твоя задача нерешаема.
>
> >
>
>
> Бардак начинается, когда вы, не внимательно прочитав, делаете
> поспешные выводы.
> Вы также не различаете "задачу не решаемую", "не решаемую
> автоматически", "не решаемую в теории", и "задачу имеющую
> удовлетворительное решение"
>
> Меня вполне устроит показать оператору список записей уже
> зарегистрированных персоналей, схожих с создаваемой.
Вопрос в том устроит ли такое решение твоего работодателя.
brother (2015-04-29 18:56:00) [29]> Чтобы оператор решал по месту, создавать новую запись или
> привязаться к уже существующей.
> Чтобы оператор решал по месту, создавать новую запись или
> привязаться к уже существующей.
те потом будет что анализировать оператор? имхо: день рождения, адрес проживания, снилс...
2.
Дмитрий (2015-04-29 18:33:00) [30]
> Труп Васи Доброго © (29.04.15 01:32) [52]
> > Про какой бардак заявлял труп васи?Про полный. Если нет
> формализации и ключа у "персонала", то твоя задача нерешаема.
>
Бардак начинается, когда вы, не внимательно прочитав, делаете поспешные выводы.
Вы также не различаете "задачу не решаемую", "не решаемую автоматически", "не решаемую в теории", и "задачу имеющую удовлетворительное решение"
Меня вполне устроит показать оператору список записей уже зарегистрированных персоналей, схожих с создаваемой.
Чтобы оператор решал по месту, создавать новую запись или привязаться к уже существующей.
Ega23 (2015-04-29 14:55:00) [31]
> Сканировать отпечатки пальцев, рисунок сетчатки
Угу. Ещё взвешивали. Было дело.
Kilkennycat (2015-04-29 14:20:00) [32]
> Сканировать отпечатки пальцев, рисунок сетчатки и стоматологическую
> карту
днк из позвоночника
Труп Васи Доброго (2015-04-29 14:12:00) [33]Сканировать отпечатки пальцев, рисунок сетчатки и стоматологическую карту. Редких двойников расстреливать на месте и кремировать останки. Это единственный способ. Решение любой задачи требует каких-то допущений, иначе ничего невозможно сделать. Если 99,99999% пациентов имеют ФИО, то и базу надо под них проектировать, а пришедщего Остапа Ибрагима Сулеймана Берта Марию Бендер-бея внести в БД просто как Остапа Ибрагимовича Бендера. Объяснить человеку, если потребуется, что в программе такие ограничения и ничего нельзя поделать. Вот и всё.
Inovet (2015-04-29 13:14:00) [34]После озвучивания реальной задачи делаем вывод - задача ещё более неразрешимая. Отличаются ли степени неразрешимости? Нет. А вот степени возможностей контроля различаются - ИНН/СНИЛС у одних есть у других нет, а документ удостоверяющий личность у всех должен быть. Хуже, но хоть как-то можно ПРИ ВВОДЕ проконтролировать задвоение. Хуже тем, что через год этот же человек придёт с новым паспортом - поменял по возрасту, сменил фамилию, потерял старый, его вносят повторно и никак не проверить был ли он уже внесён, особенно в случае смены ФИО. Ни программа не проверит, ни оператор.
Ega23 (2015-04-29 12:11:00) [35]
> Ну да, чтобы потом спрашивать: "Как отличить Иванова Ивана от Ивана Иванова".
Зависит от задачи. Хотя я бы в любом случае разбил бы на три части, составное поле всегда можно сделать.
Styx (2015-04-29 11:54:00) [36]
> Govindjee
У него ставят в качестве имени FNU - first name unknown. Хотя по факту это именно первое имя, а от last он отказался (почему - можете найти в сети). И у тех двух девушек, насколько я знаю, стоит одно имя - по информации от, собственно, Govindgee - он очень любит рассквзывать, что рн - один из трёх людей ы Штатах с одним именем. :)
Труп Васи Доброго (2015-04-29 11:35:00) [37]
> можно всё в одном поле хранить.
Ну да, чтобы потом спрашивать: "Как отличить Иванова Ивана от Ивана Иванова".
Ega23 (2015-04-29 11:00:00) [38]
> Как всё это (вместе с оглы и монголами) помешает системе
> ФИО из трёх полей????
Речь не о трёх полях, а о коверканьи ФИО. В трёх полях или в одном - это вопрос исключительно удобства пользователей, если им не надо печатать пропуска/отчеты/карточки по шаблону, гда ФИО в трёх разных местах сидит, а также не надо часто по ФИО искать - можно всё в одном поле хранить.
Inovet (2015-04-29 10:54:00) [39]> [57] Труп Васи Доброго © (29.04.15 09:43)
> Как всё это (вместе с оглы и монголами) помешает системе ФИО из трёх полей
Для ФИО должно быть три поля, кто же спорит.
Труп Васи Доброго (2015-04-29 09:43:00) [40]
> Отчества может не быть и в РФ.
> А бывают люди с одним именем. Напрмер, Madonna, Cher и Govindjee.
Не бывают. Это которые Мадонна Луиза Чикконе, Ше́рилин Саркися́н Лапье́р Бо́но О́ллмэн?
Это лишь слова. Докажите делом или законом. Выкладывайте скан реального паспорта гражданина РФ, родившегося в РФ, без фамилии, имени или отчества.
> Гражданство РФ можно получить не осуществляя свое рождение
> в РФ.
И что?
Как всё это (вместе с оглы и монголами) помешает системе ФИО из трёх полей????
Кто мешает оставить поле ПУСТЫМ??? Или как система трёх полей помешает записать в поле "имя" что то экзотическое, вроде Жерар-Ксавье или Жан-Поль?