Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

алгоритмы выборки похожих фио [D7, XP, 2003]


Страницы:   1 2 3 4 5

Дмитрий ©   (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]

Простейший перцептивный хэш используй - для твоей задачи, подойдет.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо