![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
алгоритмы выборки похожих фио [D7, XP, 2003]
Дмитрий © (2015-04-17 18:43:00)Имеется таблица Персонал связанная с таблицей Предприятия.
Появилась потребность сохранять личные координаты контактов и бонусы при смене места работы
Добавили таблицу Персоналии с личными телефонами и бонусами.
Тут же возникла проблема- при добавлении новой записи в персонал требуется определить не существует ли такая личность в Персоналиях.
Во избежание многократного дублирования.
Какие существуют алгоритмы выборки похожих лиц, включая возможные ошибки в написании имен и перестановки типа "Иван Иванов" и "Иванов Иван"?
Ega23 (2015-04-24 09:16:00) [81]
> Я пишу про РФ, здесь по закону фамилия есть у всех, вон
> у отца Шойгу тоже отчества не было, так присвоили. Сможешь
> найти паспорт РФ без фамилии - пришли скан.
Я тоже писал систему для режимных объектов. АЭС, например. Но потом выяснилось, что туда может и монгол придти, по своему паспорту, в составе дружественной делегации таких же монголов. И паспортами РФ там ваще не пахнет. Но с монголами проще, у них кириллица. А вот у немцев - латиница, причём с умляутами.
> а вот если вводить всё в одно поле, то хрен догадаешься чего именно не хватает
А зачем всё в одно поле вводить? На три надо разбивать, это и ежу понятно. Просто нельзя требовать однозначного ввода во все три, нюансов очень много.
Труп Васи Доброго (2015-04-24 09:02:00) [82]
> будут игнорировать и тупо не вводить совсем
Конечно же запретить ввод записи без заполнения обязательного поля это такая большая программная проблема... (сарказм)
Труп Васи Доброго (2015-04-24 08:55:00) [83]
> Михиалович например.
Конечно можно ошибиться, но наличие справочника имён эту возможность зело уменьшает.
Когда оператор начинает вводить в поле "Имя" Мих, то ей уже предлагается автоввод "Михаил". Операторы к этому ОЧЕНЬ быстро привыкают и сильно настораживаются, когда на стандартное имя Сеергей система говорит что в списке не значится и спрашивает "Добавить в справочник?". В 99,99% случаев оператор тут же замечает ошибку и исправляет её. Да и потом при (как это навзывают в нашей конторе) "достоверизации", если в справочние имён обнаруживаются похожие дубли типа Михаилович-Михайлович или Сергей-Сиргей, то сделав одно исправление в справочнике исправляются все Сиргеи на правильного Сергея. Это не так сложно, выявить в, (не очень то большом) справочнике имена, отличающиеся одной-двумя буквами. Людей может быть и десять миллионов, а различных имён всего тысячи полторы. Фамилии так же не отличаются разнообразием, а уж отчества вообще образуются от имени, поэтому отдельного справочника не требуют.
> У человека могут быть всякие составные имена, фамилии и
> отчества.
Не вижу как это мешает? Да хоть восьмиэтажные, но это будет всего три поля: длинное имя, большая фамилия и заковыристое отчество. Как это "ломает систему"? К тому-же таких людей по стране с гулькин хрен. И уж если такой попадётся, то 99.999% операторов будут заносить такое ФИО особо внимательно.
> У человека может не быть фамилии. У монголов нопремер.
Я пишу про РФ, здесь по закону фамилия есть у всех, вон у отца Шойгу тоже отчества не было, так присвоили. Сможешь найти паспорт РФ без фамилии - пришли скан. Да и какая проблема в пустом поле? В моей системе будет однозначно ясно чего не фватает Ф, И, или О, а вот если вводить всё в одно поле, то хрен догадаешься чего именно не хватает.
> Унутре ФИО могут встречаться непечатные служебные символы
> "Oлег" и "Олег" - не равнозначны
> Составные ФИО могут быть введены с разными видами тире-дефиса
Да-да-да, а про запрет ввода неположенных символов вы, конечно, никогда не слышали?
Проблема высосана из пальца.
З.Ы. Я то думал что я так себе программист, а большинство местных - высоколобые мастера, а оказывается люди бьются над проблемами, которые решаются после прочтения первых ста страниц любого учебника "Delphi для чайников" и пары минут размышлений. Прав был мой учитель - программист, он должен головой уметь думать, а кто только язык хорошо знает это просто кодер.
Ega23 (2015-04-24 08:36:00) [84]Паспорт люди меняют.
Inovet (2015-04-24 08:32:00) [85]> [11] Ega23 © (23.04.15 23:48)
> По ИНН
По СНИЛС, можно паспорт ещё. Но! Сообщения "СНИЛС повторяется", "ИНН повторяется" и т.п. будут игнорировать и тупо не вводить совсем, раз тупая программа не даёт ввести и пишёт чё-то там, а вот человека всё равно задвоят.
Ega23 (2015-04-23 23:48:00) [86]Подумал тут. По ИНН ориентируйся вопщем.
Ega23 (2015-04-23 22:36:00) [87]
> Во избежание многократного дублирования.
И самое главное: хоть кол на башке пользователям теши, но дублирование БУДЕТ. Хоть стопицот способов этого избежать придумывай - всё равно оно будет, т.к. народ у нас пытлив и любознателен.
Ega23 (2015-04-23 22:32:00) [88]А, ещё забыл.
9. Составные ФИО могут быть введены с разными видами тире-дефиса (ещё длинное тире).
10. Унутре ФИО могут встречаться непечатные служебные символы, это при копипасте было такое.
Ega23 (2015-04-23 22:30:00) [89]
> Какие существуют алгоритмы выборки похожих лиц, включая
> возможные ошибки в написании имен и перестановки типа "Иван
> Иванов" и "Иванов Иван"?
Как человек, в прошлом сидевший на базах с десятками тысяч персоналий в каждой, могу сообщить следующее:
1. Данные могут быть введены с ошибкой. Михиаловичнапример.
2. Данные могут быть введены в разной раскладке. Пример Розыч уже привёл.
3. "Ё-е" и "Й-и". Фёдорович-Федоровичи Михаилович-Михайлович
4. У человека может не быть фамилии. У монголов нопремер.
5. У человека может не быть отчества.
6. У человека могут быть всякие составные имена, фамилии и отчества. Пример: Пескоструев-Захреначинский Магомед-Гаджи Махмуд-Оглы
7. Знаменитый адмирал Максимилиан Иоханнес Мария Губертус рейхсграф фон Шпее(набирал по-памяти, мамойклянус!)
8. Вероятность полного совпадения ФИО не очень высокая, но она есть. Лично как минимум две пары знаю.
А вот теперь попробуй всё это дело формализовать.
И таки да, когда будете базу под персоналии проектировать, не думайте, что трёх полей varchar(32) с лихвой хватит на ФИО. Я тоже так когда-то думал, ага.
кгшзх (2015-04-23 20:02:00) [90]Имена, фамилии и отчества должны храниться каждое в отдельном поле, тогда указанная ситуация будет невозможной.
какой наивный погромист.
Rouse_ (2015-04-23 18:28:00) [91]Пожалуй вы не в ту степь ребят залезли.
Повторю еще раз ответ на данный вопрос:
> Какие существуют алгоритмы выборки похожих лиц
Ответ: любой перцептивный хэш.
А ошибка в написании имен - это уже совершенно другая задача, включающая в себя парсинг ввода как на наличие явных очепяток, так и не преднамеренно сделанных: к примеру: "Oлег" и "Олег" - не равнозначны, т.к. первая буква набрана в разных раскладках.
Труп Васи Доброго (2015-04-23 15:04:00) [92]
> и в отдельных справочниках.
Ничего смешного.
Я делал базу с отдельными таблицами имён и фамилий. То есть таблица ФИО была примерно такая: ID ID_Surname ID_Name ID_Name2 Отчества образовывались автоматически от имени, поэтому отдельная таблица для них не требовалась.
> при желании помойку можно развести где угодно
Это естественно, но предоставлять возможность для этого юзеру - мерзость.
junglecat (2015-04-23 14:55:00) [93]> каждое в отдельном поле
и в отдельных справочниках.
Только при желании помойку можно развести где угодно, будь там хоть трижды 1 НФ
Труп Васи Доброго (2015-04-23 14:42:00) [94]
> "Иван Иванов" и "Иванов Иван"
Архитектору БД сделать татуировку на лбу - "нормальная форма №1".
Имена, фамилии и отчества должны храниться каждое в отдельном поле, тогда указанная ситуация будет невозможной.
Германн (2015-04-17 22:59:00) [95]Удалено модератором
Rouse_ (2015-04-17 19:09:00) [96]Простейший перцептивный хэш используй - для твоей задачи, подойдет.