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

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

Нечеткое сравнение полей


RAHS ©   (2003-06-28 14:41:00) 

Задача: Есть две таблицы, в обоих - поля фамилия, имя, отчество.
Необходимо выбрать записи, относящиеся к одному и тому же человеку. Проблема в том, что в записях допущены ошибки, т.е. тот же Locate определяет их как разные. Нет ли способа эту проблему решить?


Александр Ч_   (2003-07-02 09:46:00) [1]

Существует классификатор имен и отчеств. Можно сравнивать с ним
на предмет поиска опечаток.


RAHS   (2003-07-02 09:35:00) [2]

Благодарю за помощь


muk07   (2003-06-29 14:28:00) [3]

Я применял следующее преобразование:
1. Сдвоенные согласные заменить на одиночные
2. выполнить замены: a->o и->ы ю->у итд
3. звонкие согласные заменить на глухие
После этого сравнивать, допуская 1,2 расхождения в буквах


XamderMan   (2003-06-29 12:04:00) [4]

http://www.programme.ru/archive/2002/8/082002_3.phtml
+ немного подумать над тем, как это реализовать. Делал подобную вещь для фамилий на украинском языке. Работает супер. Происходит практически мгновенный поиск фамилий (потому что индексированный).


sniknik   (2003-06-29 01:02:00) [5]

> А если так имя пишется, к примеру?
в смысле? символ "блак карт" подчеркивание входит в имя? не бывает такого (по моему). единственное исключение когда не буква в имени это Д`артаньян (не сам, а символ :о)).
> А с чем сравнивать?
а вот с этим самым и сравнивать (_), подчеркивание в like обозначает буквально - один любой символ.
если надо именно подчеркивание определить, есть ESCAPE или "[_]XXX" в зависимости от движка SQL могут различия в синтаксисе (подчеркивание тоже в некоторых вопросом заменяется)
но в общем да, если закладыватся на возможность таких символов в именех/фамилиях то с запросом попыхтеть придется, все варианты перебрать, а ведь еще его динамически формировать нужно. и с такой кучей условий еще и тормозить будет жутко.


Dred2k   (2003-06-28 22:00:00) [6]

> sniknik © (28.06.03 21:17)

А с чем сравнивать? А если так имя пишется, к примеру? Причем именно у него (от нац. особеностей, например)?
Накапливать стандартные ошибки ( > sniknik © (28.06.03 15:12)) никто не будет. Это ведь по сути - правила формирования фамилий, имен, ... , они "широкие", их никто "вести" не будет - т.к. громоздко слишком.
(либо огромный всевозможный словарь искать, либо его руками делать... плюс к этому - условия по словарю...)

По-моему, это в общем виде при данных реальных упрощенных условиях не решается (хотя проблема интересная...).
Кроме того, позволю себе обратить внимание общественности на одну вполне очевидную мысль: информационные технологии дают пользователю мощный и богатый инструмент, не более. Взамен они требуют простую вещь - его творчество (в разных степенях, конечно). Механизмы подовляющего большинства человеческих процессов не предусматривают возможности четкого цифрового анализа. Не получится тут "вести юзера за ручку". Только в некоторых областях, разве что.
Исходя из этого, предположу вывод - в данной ситуации целесообразнее сделать пользователя творцом своего счастья.
(ну там справочники, кэши имен и т.п.... по вкусу/возможностям)

Вот, затравка для долгой беседы... ;)


sniknik   (2003-06-28 21:17:00) [7]

попробовать серию условий
SELECT * FROM MyTable WHERE Name LIKE "_ндрей" or
Name LIKE "А_дрей" or
Name LIKE "Ан_рей" or
... до конца имени

также для фамилии, отчества
???, для одного символа так получится (может можно и лутше придумать)


RAHS   (2003-06-28 19:31:00) [8]

На текую точность я не рассчитываю, мне хватит, если будет учитываться расхождение в один символ и в одном поле.


sniknik   (2003-06-28 15:12:00) [9]

теоретически очень просто, написать систему с человеческим восприятием (человек же как то распознает что это тот же человек но только с ошибкой :о))

практически... не видел таких.
мо моему возможны только частные рещения, сделать чтото типа дополнительных таблиц с возможными вариантами ошибок по каждому Фамилия, имя, отчество. при нахождении в этих таблицах подставлять правильное... но в концов можно просто имя и фамилию местами поменять, ошибочно ... :о))


Наверх

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