Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Вниз

Борьба с дублированием   Найти похожие ветки 

 
paul_k   (2003-10-29 10:45) [0]

Возник следующий вопрос. При вводе данных в справочник надо проверить а нету ли там такого уже. Понятно, что при полном совпадении ввод нового надо запретить и предложить изменить(использовать) существующий. А как поймать разнуцу между "ул. Петровка" и "Петровка ул." Наверняка существуют способы проведения подобного анализа. Но вот как они выглядят?


 
Anatoly Podgoretsky   (2003-10-29 10:47) [1]

Искуственный интеллект


 
paul_k   (2003-10-29 10:51) [2]

Спасибо, но это будет слишком для маленькой разработки. Хотя а где взять готовую функцию ИИ заточеную под это? -:)


 
Johnmen   (2003-10-29 10:52) [3]

Данный вопрос уже неоднократно здесь всплывал.
Как сказал АП нужен ИИ. Причем, даже если этот ИИ будет самый ииистый, успешное решение задачи будет составлять ~80%.


 
bushmen   (2003-10-29 10:54) [4]

Переложи решение данной проблемы на оператора - сделай поиск по подстроке. А оператор будет сам решать, добавлять или нет


 
Anatoly Podgoretsky   (2003-10-29 10:56) [5]

Самый эффективный ИИ это админстративные меры


 
paul_k   (2003-10-29 10:59) [6]


> Johnmen © (29.10.03 10:52) [3]
> Данный вопрос уже неоднократно здесь всплывал.

Не затруднит ли Вас подсказать куда смотреть на эту тему. искал - не нашел.

> bushmen © (29.10.03 10:54) [4]
> Переложи решение данной проблемы на оператора

сейчас переложено. в базе бардак. одних "газпромов" в разных вариациях штук 20


 
paul_k   (2003-10-29 11:00) [7]


> Anatoly Podgoretsky © (29.10.03 10:56) [5]
> Самый эффективный ИИ это админстративные меры

полностью согласен. Но ситуация такова, что "политикой партии" не все можно разрулить, к сожалению


 
Vlad   (2003-10-29 11:05) [8]

>paul_k © (29.10.03 10:59) [6]
Да, знакомая задача. Над ней бьются во многих организациях.
Один из вариантов решения(требует ручной обработки): добавляешь в таблицу некое поле, смысл которого - ID синонима, т.е. указатель на другую запись, к-рая является синонимом по отношению к этой. Естественно "отлавливать" такие дубли придется вручную, но зато ты сможешь однозначно определить (при формировании отчетности напр.) что твои 20 "газпромов" - это одна организация.


 
Anatoly Podgoretsky   (2003-10-29 11:10) [9]

paul_k © (29.10.03 11:00) [7]
Указанная ситуация польностью разруливается политикой партии, только не надо ее разруливать по ответственным.


 
Anatoly Podgoretsky   (2003-10-29 11:11) [10]

paul_k © (29.10.03 10:59) [6]
Установить сроки на разруливание Газпромов, назначить одно ответсвенного за это дело


 
TohaNik   (2003-10-29 11:15) [11]

Ну если дело в
> "газпромов"
то наверно можно привязаться к ОКПО.
Сложнее с материальным учетом.


 
paul_k   (2003-10-29 11:16) [12]

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


 
Sergey13   (2003-10-29 11:17) [13]

2Vlad © (29.10.03 11:05) [8]
А че так сложно то? ИМХО, при выявлении дубликатов нужно просто одну запись удалять переписывая ссылки на остающуюся запись. Разумеется не каждому юзеру давать такие права да и процедуру эту обставлять необходимыми условиями.


 
paul_k   (2003-10-29 11:17) [14]

2 TohaNik
еще проще привязать к ИНН
Согласен пример был неудачен


 
paul_k   (2003-10-29 11:19) [15]

Sergey13 ©
речь о том как выявить потенциальный дубликат ещё при вводе.
хотя алгоритм "отлова" врятли будет отличатся.


 
Vlad   (2003-10-29 11:22) [16]

>Sergey13 © (29.10.03 11:17) [13]
Как все просто у вас.
А если по каждой из этих дублирующих записей уже куча информации в различных таблицах, т.е. открытые лицевые счета, проводки итп, что с ними делать ? Неужто найдется смельчак который все ссылки будет переправлять ?


 
Ломброзо   (2003-10-29 11:32) [17]

мне кажется, проблему можно решить частью регулярными выражениями, частью при помощи русского аналога SoundEx; для оракла я про такой модуль что-то слышал - поищи по "RCO" и "SoundEx"


 
Sergey13   (2003-10-29 11:33) [18]

2Vlad © (29.10.03 11:22) [16]
>А если по каждой из этих дублирующих записей уже куча информации в различных таблицах
Я же написал "переписывая ссылки на остающуюся запись". Это делается элементарно одним запросом на таблицу. А вот если 20 газпромов будут ссылаться друг на друга по кругу можно получить еще более удивительные результаты при составлении тех же отчетов. Или постоянно следить за корректностью таких взаимных ссылок.

2paul_k © (29.10.03 11:19) [15]
>речь о том как выявить потенциальный дубликат ещё при вводе.
Если ловить по уникальным полям - вопроса нет - все просто. Если по разнице в написании - то только ИИ, как справедиво заметил АП[1].


 
Anatoly Podgoretsky   (2003-10-29 11:35) [19]

Vlad © (29.10.03 11:22) [16]
Зачем смелчак, тут доброволец не нужен

Ломброзо © (29.10.03 11:32) [17]
SoundEx не панацея. НО ПОМОЩНИК


 
paul_k   (2003-10-29 11:39) [20]

А можно подробнее как SoundEx работает?

Что означает возвращаемый набор символов?


 
Anatoly Podgoretsky   (2003-10-29 11:43) [21]

paul_k © (29.10.03 11:39) [20]
По определенному алгоритму преобразовывает символьнуж последовательность в 4 символьный хеш


 
Anatoly Podgoretsky   (2003-10-29 11:44) [22]

Была изобретена в конце 19 века для борьбы с подобным безобразием при проведении толи выборов, толи переписи


 
paul_k   (2003-10-29 12:11) [23]

Остался один вопрос. Как научить SoundEx работать с кирилицей.
или в транслит переводить все?


 
Johnmen   (2003-10-29 12:21) [24]

>paul_k ©

Такие ИИ узко специализированы и зависят от предметной области.
Так что, если есть желание, пиши сам со своими принципами и алгоритмами.
Например, такой момент: <Если пишем "газпром наш любимый" или "Газпром ОАО" или "контора ГАЗПР.", то считать всё это, как "Газпром", т.к. присутствует определяющая однозначная последовательность "LowerCase("газпр")", являющаяся глобальным синонимом>


 
Ломброзо   (2003-10-29 12:22) [25]

Попробуй, но в статьях пишут, что это кривой способ, нужно искать именно русскоязычный модуль. А где - шут его знает, честно говоря. Но все равно попробуй. MS SQL Server такую функцию содержит.


 
paul_k   (2003-10-29 12:37) [26]

В Дельфи тоже прописан ряд функций основанных на SoundEx. Но кирилицы они не знают.
прописано некое соответствие символов.
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
(0, 1, 2, 3, 0, 1, 2, -1, 0, 2, 2, 4, 5, 5, 0, 1, 2, 6, 2, 3, 0, 1, -1, 2, 0, 2,
// [ / ] ^ _ "
0, 0, 0, 0, 0, 0,
// a b c d e f g h i j k l m n o p q r s t u v w x y z
0, 1, 2, 3, 0, 1, 2, -1, 0, 2, 2, 4, 5, 5, 0, 1, 2, 6, 2, 3, 0, 1, -1, 2, 0, 2);

а есть ли где либо описание почему именно такое соответствие и как построить подобный ряд для кириллицы


 
ZrenBy   (2003-10-29 14:43) [27]

http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=10671


 
paul_k   (2003-10-29 15:28) [28]

2 ZrenBy
Спасибо.. понял.
Значит административно и дальше никак.ну-ну.


 
kaif   (2003-10-29 15:39) [29]

Я считаю, что для каждой задачи есть особенное решение. Например, если вычснилось, что ИЧП ГАЗПРОМ и ОАО ГАЗПРОМ одно и то же, то в бухгалтериях не следует перенаправлять ссылки, так как нарушится преемственность отчетности. Вместо этого следует закрыть счет ИЧП ГАЗПРОМ и начислить сумму на счет ОАО ГАЗПРОМ отдельной бухгалтерской проводкой. ИМХО, то же самое следует делать и с товарами (списывать один на счет другого). Подозреваю, что именно отход от бухгалтерской техники в некоторых учетных программах и порождает эту проблему. Многим кажется, что проводки не нужны и без них можно обойтись. Создать типа реляционную модель, связи один-ко-многим, справочники и - вперед. Не совсем это так... И проблема, о которой зашла речь имеет в бухгалтерской традиции вполне определенное и безконфликтное решение.


 
kaif   (2003-10-29 15:41) [30]

Кстати, не исключено, что "ООО Вася Пупкин" это тоже ГАЗПРОМ. И никакой ИИ тогда не спасет.


 
Ломброзо   (2003-10-29 15:59) [31]

Отыскал в загашниках ссылок.
Конечно, можно и пользователя построить, но лучше вот:

http://itman.narod.ru/source/source.html


 
paul_k   (2003-10-29 16:35) [32]

2 kaif
написал же - пример с "Газпром" неудачен
более удачный пример - "Н Новгород" , "Нижиний Новгород" и производные.


 
Cranium   (2003-10-29 17:11) [33]

В случае со справочником клиентом лечится на мой взгляд следующем образом ИНН обязательно к заполнению, адреса вводить через КЛАДР, благо это не проблема (имеется для всей страны)...


 
paul_k   (2003-10-29 17:15) [34]

КЛАДР это хорошо.. только не охватывает он все.
для себя нашел приемлемое решение
http://delphibase.endimus.ru/?action=viewfunc&topic=strmath&id=10289

http://aforge.ibd.lv/?27&orion=2362c8a7c63301d6287dd7b5f5315b79

Всем спасибо за помощь и участие



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.015 c
14-56812
Nick-From
2003-10-24 17:52
2003.11.17
FastReport для Delphi 7


1-56763
cdadmitriy
2003-11-06 13:33
2003.11.17
Как изменить ClassName Programm на delphi


14-56877
superior
2003-10-26 15:17
2003.11.17
Как узнать параметр с которым запущена моя программа???


8-56777
DBDev
2003-07-22 14:00
2003.11.17
какой функцией вычленить заданный фрагмент из TPicture?


3-56446
Kinder
2003-10-28 20:01
2003.11.17
ошибка Update где?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский