|   |   | 
| 
 | Нечеткий поиск по ФИО в базе | ☑ | ||
|---|---|---|---|---|
| 0
    
        Garykom гуру 15.11.15✎ 23:00 | 
        Есть база (кому интересно 115ФЗ) примерно 6к+ записей
 Там есть ФИО, ДР, паспорт, адрес Есть анкеты клиентов где тоже есть эти данные ФИО, ДР, паспорт, город, телефон и т.д. Анкет клиентов на данный момент 4к+, и каждый месяц +200. Какими алгоритмами будет быстрее сверять все наши анкеты на нахождении в перечне? Перечень довольно часто обновляется (целиком замена) несколько раз в месяц. Требуется сделать проверку всех наших анкет с нечетким поиском в перечне. Типа есть у нас Иванов Иван Иванович, а в перечне есть Иванов Иван Петрович - тогда этот наш Иванович И.И. должен попасть в список на проверку оператором. Алгоритм должен работать очень шустро. Максимум на проверку 10к среди 10к 2-5 минут. | |||
| 174
    
        Кирпич 19.11.15✎ 16:24 | 
        +(171) правда там на Delphi7. Кодировка ANSI.     | |||
| 175
    
        Garykom гуру 19.11.15✎ 16:39 | 
        (174) мне как то пофиг я только питонов не люблю, жуются плохо
 а дельфи тем более 7, еще с турбо паскаля на ура идет | |||
| 176
    
        Belomor 19.11.15✎ 16:40 | 
        Скинул свое решение для 7.7     | |||
| 177
    
        Кирпич 19.11.15✎ 16:42 | 
        (175) да я про кодировку. в новых delphi string юникодный. если нет 7, то придется переделывать.     | |||
| 178
    
        Garykom гуру 19.11.15✎ 17:06 | 
        (177) это фигня, в лазарусе прекрасно компилится, только преобразование кодировки добавил чтобы нормально выводил вместо ?????
 но чуял что где то наколка )) подставил свой список за период из 1600 фио, за 00:00:51:015 отработало но это решение все таки половинчатое, оно предполагает что хоть что то Ф, И или О обязательно правильно ввели и оно правильно в перечне тоже 1 28,57 АБРАМОВА ЮЛИЯ ВАСИЛЬЕВНА ГАНЖА ЮЛИЯ ВАСИЛЬЕВНА !нет в списке АБРАМОВСКАЯ ОЛЬГА ИГОРЕВНА !нет в списке АБУГОВА МАРИЯ ИЗБУДИНОВНА !нет в списке АВАЛИАНИ НАТАЛЬЯ ЮРЬЕВНА 1 23,08 АВДЕЕВ СЕРГЕЙ ВЛАДИМЕРОВИЧ ЖАРКОВ СЕРГЕЙ ВЛАДИМИРОВИЧ 2 23,08 АВДЕЕВ СЕРГЕЙ ВЛАДИМЕРОВИЧ ЗАХАРОВ СЕРГЕЙ ВЛАДИМИРОВИЧ 3 28,00 АВДЕЕВ СЕРГЕЙ ВЛАДИМЕРОВИЧ ЗЫБИН СЕРГЕЙ ВЛАДИМИРОВИЧ 4 28,00 АВДЕЕВ СЕРГЕЙ ВЛАДИМЕРОВИЧ ЗЫБИН СЕРГЕЙ ВЛАДИМИРОВИЧ 5 23,08 АВДЕЕВ СЕРГЕЙ ВЛАДИМЕРОВИЧ КАТУНЦЕВ СЕРГЕЙ ВЛАДИМИРОВИЧ 6 23,08 АВДЕЕВ СЕРГЕЙ ВЛАДИМЕРОВИЧ ЛЕОНОВ СЕРГЕЙ ВЛАДИМИРОВИЧ | |||
| 179
    
        Garykom гуру 19.11.15✎ 17:08 | 
        (178)+ 1    28,57    АБРАМОВА ЮЛИЯ ВАСИЛЬЕВНА    ГАНЖА ЮЛИЯ ВАСИЛЬЕВНА  - чисто технически нужно смотреть паспорт на вопрос штампов прежних Ф и(или) еще что ))     | |||
| 180
    
        Кирпич 19.11.15✎ 17:17 | 
        (178) "что хоть что то Ф, И или О обязательно правильно ввели"
 да нет. ему вообще по барабану. всё зависит от функции сравнения. какой процент совпадения тебе нужен. const LevenProcConst: Extended = 30; //процент несовпадений в нечетком сравнении вот LevenProcConst и крути | |||
| 181
    
        Garykom гуру 19.11.15✎ 17:27 | 
        (180) тогда слишком долго считает...     | |||
| 182
    
        ProxyInspector 19.11.15✎ 17:27 | 
        Я сделал. Скорость приметно 5 сек на 200 тыс записей. Если допускать, что хотя бы одно поле должно совпадать то скорость вырастет раз в 10. Если допускать, что первая буква в Фамилии введена правильно, то скорость вырастет в два раза. Скорость пропорционально объему базы. Для 6 тыс записей скорость поиска << 1 сек  
 Нечёткое сравнение с возможностью вместо любого символа иметь что угодно. Если ищем "Иванов" тогда делаем фильтр ( Рег.Наименование LIKE "%иванов%") ИЛИ( Рег.Наименование LIKE "%ванов%") ИЛИ( Рег.Наименование LIKE "%и%анов%") ИЛИ( Рег.Наименование LIKE "%ив%нов%") ИЛИ( Рег.Наименование LIKE "%ива%ов%") ИЛИ( Рег.Наименование LIKE "%иван%в%") ИЛИ( Рег.Наименование LIKE "%ивано%") ИЛИ( Рег.Наименование LIKE "%иванов%") | |||
| 183
    
        ProxyInspector 19.11.15✎ 17:30 | 
        Можно список поиска втаскивать в таблицу значений, к помещать ее во временную таблицу и к таблице уже делать запрос. А можно в регистре сведений хранить информацию     | |||
| 184
    
        Garykom гуру 19.11.15✎ 17:31 | 
        (182) люблю лисапедистов ))
 после них мопед, супербайком кажется клиентам | |||
| 185
    
        Garykom гуру 19.11.15✎ 17:34 | 
        (182) еще чуть чуть и дойдем до понимания метода N-грамм     | |||
| 186
    
        ProxyInspector 19.11.15✎ 17:34 | 
        Однако все это работает и будет работать не на копеечных 6 тыс записей, а на 6 млн :) Хотя хозяин барин.     | |||
| 187
    
        ProxyInspector 19.11.15✎ 17:35 | 
        Ты можешь бороться с 
 АВДЕЕВ СЕРГЕЙ ВЛАДИМЕРОВИЧ = ЗЫБИН СЕРГЕЙ ВЛАДИМИРОВИЧ | |||
| 188
    
        Кирпич 19.11.15✎ 17:37 | 
        (181) ну так всех, кого надо нашло. или нет? 
 а что на Lazarus медленно, так попробуй без отладчика запустить или это перекодировки в UTF8 сжирают время. На дельфях твой список из 5000 у меня за 4 секунды пролетает. (182) ну а теперь проделай это с остальными 1999999 людьми и скажи сколько это времени заняло | |||
| 189
    
        Гёдза 19.11.15✎ 17:37 | 
        Надо нейросеть учить     | |||
| 190
    
        ProxyInspector 19.11.15✎ 17:40 | 
        Мой метод даст в лучшем случае
 авднеев сероей влажимирович = авдеев сергей владимирович | |||
| 191
    
        Garykom гуру 19.11.15✎ 17:41 | 
        (190) перестановки двух символов? 
 это после пропусков и лишних букв такая же частая ошибка | |||
| 192
    
        ProxyInspector 19.11.15✎ 17:41 | 
        Перестановку тоже даст     | |||
| 193
    
        Garykom гуру 19.11.15✎ 17:42 | 
        (191)+ вадеев сегрей владиимрович     | |||
| 194
    
        ProxyInspector 19.11.15✎ 17:42 | 
        Наверно     | |||
| 195
    
        Garykom гуру 19.11.15✎ 17:42 | 
        (192) и чем он лучше метода n-грамм ?     | |||
| 196
    
        Garykom гуру 19.11.15✎ 17:43 | 
        (189) думал, а какую порекомендуете?
 я только с однослойными персептронами развлекался | |||
| 197
    
        ProxyInspector 19.11.15✎ 17:45 | 
        Перестановку берешь вместо "%" "_ _"     | |||
| 198
    
        ProxyInspector 19.11.15✎ 17:46 | 
        Конечно если 
 АВДЕЕВ СЕРГЕЙ ВЛАДИМЕРОВИЧ = Иванов Иван Иванович без нейросети не обойтись :) | |||
| 199
    
        ProxyInspector 19.11.15✎ 17:47 | 
        К слову % корректно съест
 вадеев сегрей владиимрович = авдеев сергей владимирович | |||
| 200
    
        Garykom гуру 19.11.15✎ 17:56 | 
        (180) сорри, сча соображать уже не могу, age++
 так что позже отпишусь что меня смущает в этом методе принцип то понятен, ограничение полной проверки разными способами | |||
| 201
    
        ProxyInspector 19.11.15✎ 18:19 | 
        авдеев сергей владимирович = ХХХев сеХХХей влХХХ = Авдеев С. В.
 Надо только чтобы Фамилия, Имя, Очество были в отдельных колонках. И самое интересное, что это все работает очень быстро. Если немного подумать, то можно список из 1 млн строк нечетко сравнить со списком из другого 1 млн строк | |||
| 202
    
        Кирпич 19.11.15✎ 18:45 | 
        (200) я знаю почему на лазарусе тормозит. там по умолчанию не работает двоичный поиск. замени функцию на это и всё залетает
 procedure LoadStringList(T: TStrings; filename: string); var i: integer; begin T.LoadFromFile(filename); for i := 0 to T.Count - 1 do T[i] := FormatFio(T[i]); TStringList(T).Sorted := True; end; | |||
| 203
    
        Garykom гуру 19.11.15✎ 18:45 | 
        (201) уже нашел простой в использовании способ, причем он универсальный без. разницы какого вида строки (сколько там пробелов и т.д.)
 линейно зависит от длин строк для 1 млн х 1 млн примерно 10 млн миллисекунд потребуется а про то что пишешь, это нечто вроде построения множества символьных масок/шаблонов и затем поиск строк им удовлетворяющим две проблемы: 1. время на постройку/формирование этих масок/шаблонов 2. при увеличении длины строк линейно увеличивается время построения масок это мелочи, но квадратно увеличивается время на проверку (так как количество разных вариантов масок/шаблонов вырастает) | |||
| 204
    
        Кирпич 19.11.15✎ 18:49 | 
        +(202) ну и в StartProcess добавь в конце
 FioList.Free; MasterFioList.Free; | |||
| 205
    
        Garykom гуру 19.11.15✎ 19:01 | 
        (204)
 "R := (R / L) * 100; result := R <= LevenProcConst;" когда const LevenProcConst: Extended = 30; //процент несовпадений в нечетком сравнении точно нет ошибки? | |||
| 206
    
        Кирпич 19.11.15✎ 19:10 | 
        (205) ну это не совсем процент. Я эту фигню к длине строки пытаюсь прилепить. Функция же выдает количество вставок, замен  и удалений. На слове из 3 букв это одно, а на слове из 30 букв это другое. Можешь заменить на любую функцию. Я просто в инете нашел, вроде работает.     | |||
| 207
    
        Garykom гуру 19.11.15✎ 19:14 | 
        (206) ты не понял ))
 там выше если разница 0 то ложь, а тут если разница меньше или равна 30 то истина )) | |||
| 208
    
        Кирпич 19.11.15✎ 19:17 | 
        (207) ЕСЛИ 0 ТО СЛОВА ОДИНАКОВЫЕ. НАМ НЕ НУЖНЫ ОДИНАКОВЫЕ. МЫ ОДИНАКОВЫЕ ПРОПУСКАЕМ.     | |||
| 209
    
        Кирпич 19.11.15✎ 19:18 | 
        Блин большие буквы потому что на телефоне нитуда тыкнул     | |||
| 210
    
        Garykom гуру 19.11.15✎ 19:25 | 
        (209) это ладно, просто для меня логика программы совсем непонятная
 я не так думаю, совсем не так, и не так код пишу т.е. никаких возвратов/выходов досрочно из процедуры/функции, всегда до конца доходим с помощью условий и в конце возвращаем результат установленный по пути если выход досрочно то это try-catch сработал и зачем "function LevenProc(s, t: string; var R: Extended): boolean;" когда можно function LevenProc(s, t: string): Extended; ? но это мелкие придирки | |||
| 211
    
        Кирпич 19.11.15✎ 19:27 | 
        (210) да пиши как хочешь. Главное чтобы работало.     | |||
| 212
    
        Злопчинский 21.11.15✎ 09:47 | 
        (163) Не сношайте мозг.
 если цена одной ошибки настолько высок - обеспечивайте потребный ресурс для снижения вероятности ошибки до приемлемого для вас уровня. | |||
| 213
    
        Garykom гуру 21.11.15✎ 11:23 | 
        (212) ничего... и до складов как нибудь свой егаис, платон или 115фз доберется...     | |||
| 214
    
        Злопчинский 21.11.15✎ 11:31 | 
        (213) "..только в эру эту прекрасную нам не жить ни тебе уже и не мне...." ;-) - и слава богу! ;-)     | |||
| 215
    
        Garykom гуру 21.11.15✎ 11:36 | 
        (214) ви таки так плохо думаете о наших законодателях?     | |||
| 216
    
        Garykom гуру 21.11.15✎ 11:39 | 
        А насчет цен ошибки, проблема что $ то откуда взять на этот дополнительный прогрессивный (причем от количество продаж а не от суммы) налог?
 Вот сча разбираемся Алинину как Аликину забили в базу, случайно выплыло она от СМС решила отказаться. А до этого было что у нас у человека в базе фамилия почему то нету в карточке (и как смогли догадаться занести у меня там запрет пустых), а по его имени и отчеству в перечне числится "нетоварищ" | |||
| 217
    
        ProxyInspector 21.11.15✎ 20:21 | 
        Как успехи в нечетком сравнении ФИО.
 Я придумал небольшое дополнение к велосипеду, которое проводит нечеткое сравнение по ТРЕМ символам. Т.е. перестановка двух символов местами, опечатка в одном символе, залипание клавиш, изменение двух символов в трех соседних и как бонус - двойные фамилии. Иванов Иван Иванович Иавнов Иван Иванович Ивааанов Иоан Иванонанович Петров-Иванов Иван Иоанович Оказывается один и тот же человек | |||
| 218
    
        ProxyInspector 21.11.15✎ 20:27 | 
        Этот алгоритм работает с параноидальной подозрительностью. Он должен быть востребован в рамках современной действительности.  На твоей базе 6000 фамилий проверка 200 фамилий будет занимать меньше 1 сек     | |||
| 219
    
        Garykom гуру 21.11.15✎ 20:59 | 
        (218) патентуй :)     | |||
| 220
    
        Garykom гуру 21.11.15✎ 21:01 | 
        (219)+ особенно если замены "а" на "a" или "о" на "o" нормально отрабатывает
 причем без предварительной замены иначе как имена на английской раскладке без преобразования... | |||
| 221
    
        МуМу 21.11.15✎ 21:50 | 
        Было лень все читать. Как я делал в свое время и какие основные выводы почерпнул.
 1) 1С здесь вообще не при делах(скорость важна, как форма отображения пожалуйста) 2) Реляционные СУБД тоже не очень подходят - но в моем вариантов особых не было, поэтому применялись следующие варианты комбинаторики. Сразу скажу что ошибка в два и более символа это уже на основании словарно-справочного сопоставления. Основная концепция построена на предрасчете(типа как ОЛАП кубы рассчитываются) Берется слово оригинал - к нему рассчитывается большое количество комбинаций слов с одной ошибкой. Как это делается - Путем простой замены каждого символа на любой проивзольный. Также аналогично делается для +1 и -1 символ близлежащий. Таким образом можно сопоставлять. Далее можно накладывать ограничения типа "нельзя столько и таких согласных подряд". Далее можно включать словарное сопоставление. Получается соотношение один ко многим. Служебная база очень растет, Но возможно сопоставление в онлайне. Если же онлайн не важен то тут другие алгоритмы, реляционные СУБД не самый лучший выбор. | |||
| 222
    
        МуМу 21.11.15✎ 21:51 | 
        Да и еще эти задачи хорошо параллелятся и поэтому скорость очень зависит от оборудования(при хороших алгоритмах).     | |||
| 223
    
        МуМу 21.11.15✎ 21:52 | 
        Обратите внимание как яндекс подсказки выдает. Можете подумать об ограничениях.     | |||
| 224
    
        Garykom гуру 21.11.15✎ 22:05 | 
        (223) яндекс выдает подсказки на методе n-грамм + захардкоженный словарик
 примеры: водка = вотка - ищется вобла = вопла - не ищется | |||
| 225
    
        Garykom гуру 21.11.15✎ 22:09 | 
        (221) а проблема в принципе решена, при небольших объемах (до нескольких тысяч строк, причем строки до 150 символов)
 даже просто расстояние Левенштайна нормально работает при реализации на общих языках и засовывании все в память если нужно "еще быстрее" то специальные методы с построением битовых хешей строк (коротких к примеру 32 бита) и сравнении уже только их | |||
| 226
    
        Злопчинский 21.11.15✎ 22:48 | 
        (217)  вот вы все продолжаете велосипед изобретать
 Эти ваши перестановки по трем символам стрмач автоматом понимает что эти пять фамилий очень близки по похожести Он их в пуле похожих автоматом поверху выдаст | |||
| 227
    
        Злопчинский 21.11.15✎ 22:53 | 
        С недели две назад клиент нарисовался
 Я ему дохренища лет назад рм писал для магазина радиодеталей для заказов по прайсам поставщиков - до сих пор работает клиент счастлив А у него сиуевина посложнее чем с фамилиями была - у него все буквенно цифровое и все короткое и надо было похожее искать И даже в таких сложных условиях стрматч спавлялся очень хорошо Без оператора нифига все равно не обойдетесь Всегда какаяниь фигня вылезет типа щекатурка и штукатурка | |||
| 228
    
        ProxyInspector 21.11.15✎ 23:00 | 
        (220) Ему до лампочки русский на английский работает без предварительный замены. Алгоритм красивый и умнее всех нас вместе взятых. Обрабатывает пропуски 1-2 букв.
 А мой алгоритм ищет водка = вотка вобла = вопла воводка вовыводка и так далее и тому подобное | |||
| 229
    
        Garykom гуру 21.11.15✎ 23:00 | 
        (227) да тут уже предлагали нейронные сети...     | |||
| 230
    
        Garykom гуру 21.11.15✎ 23:01 | 
        (228) № патента? ну или хотя бы авторского свидетельства     | |||
| 231
    
        ProxyInspector 21.11.15✎ 23:04 | 
        Свой алгоритм я тестировал на прайсах по запчастям. 250 тыс строк за 5 сек. Это уже с выводом отфильтрованных строк регистра сведений     | |||
| 232
    
        Garykom гуру 21.11.15✎ 23:05 | 
        (231) а можно хоть что то для подтверждения? хотя бы видео?     | |||
| 233
    
        ProxyInspector 21.11.15✎ 23:07 | 
        Идея - смотри (182). Это нулевое приближение. За 1 мин этот алгоритм меняется до уровня (228)     | |||
| 234
    
        ProxyInspector 21.11.15✎ 23:09 | 
        Идеально он работает когда надо производить нечеткое сравнение по более чем одному полю. Чем больше полей, тем лучше     | |||
| 235
    
        ProxyInspector 21.11.15✎ 23:15 | 
        щекатурка и штукатурка по моему при поиске по трем символам мой алгоритм посчитает разными вернее
 щекатурка = штукатурка штукатурка <> щекатурка В этом что-то есть, для дополнительной фильтрации | |||
| 236
    
        Garykom гуру 21.11.15✎ 23:19 | 
        (233) хаха ))
 "По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиатем кдаужЮ бкуву по отдльенотси, а все солво цликеом. " | |||
| 237
    
        ProxyInspector 21.11.15✎ 23:23 | 
        (236) У тебя в каждом слове по две ошибки через правильный символ. Такого он конечно не съест. А вот 
 Иванов Иван Иванович Иавнов Иван Иванович Ивааанов Иоан Иванонанович Петров-Иванов Иван Иоанович съест | |||
| 238
    
        Garykom гуру 21.11.15✎ 23:26 | 
        (237) проблема слишком много будет ложных срабатываний
 можешь сам убедиться Иванов, Пиванов, Упиванов, Выпиванов, Черезногузадерищенкованов.... | |||
| 239
    
        ProxyInspector 21.11.15✎ 23:27 | 
        Естественно по этому и надо несколько полей     | |||
| 240
    
        ProxyInspector 21.11.15✎ 23:28 | 
        Фамилия, имя, отчество ну а потом оператор     | |||
| 241
    
        ProxyInspector 21.11.15✎ 23:29 | 
        Согласись, что Иванов, Пиванов - это одно и тоже. Ошибка в одной букве     | |||
| 242
    
        Garykom гуру 21.11.15✎ 23:30 | 
        (241) для поиска "Пиванков" нет     | |||
| 243
    
        ProxyInspector 21.11.15✎ 23:32 | 
        Иванов = Пиванов
 Иванов <> Пиванков Иванов = Иванков | |||
| 244
    
        ProxyInspector 21.11.15✎ 23:36 | 
        Конечно там есть побочные эффекты типа
 Иванов = Иванкян - это правильно, если ты допускаешь ошибку в трех буквах | |||
| 245
    
        Garykom гуру 21.11.15✎ 23:39 | 
        (243) по сути то что предлагается это обычный "Алгоритм расширения выборки" 
 из http://habrahabr.ru/post/114997/ только без составления словаря, вместо этого составляем "шаблоны поиска" | |||
| 246
    
        ProxyInspector 21.11.15✎ 23:43 | 
        Да только он реализован средствами базы по индексированному полю. Поэтому очень быстрый. Более того Алгоритм расширения выборки они не смогут реализовать по трем символам. А у на он реализован     | |||
| 247
    
        Garykom гуру 21.11.15✎ 23:47 | 
        (246) и все равно процент достоверности в сравнении со скоростью поиска никакой ))
 т.е. если посчитать "качество" алгоритма то будет хуже других стандартных вот для сопоставления номенклатуры скажем может и катит (по артикулам/кодам зарытым внутри длинной строки в вперемешку с хламом) | |||
| 248
    
        ProxyInspector 21.11.15✎ 23:49 | 
        Если ты ищешь во трем полям, то все получается великолепно. Ну и конечно если ошибок не очень много     | |||
| 249
    
        ProxyInspector 21.11.15✎ 23:54 | 
        Качество поиска великолепное.
 Есть две большие разницы ошибка в одной букве, ошибка в двух буквах и перестановка, ошибка в трех буквах и перестановка, английский/русский алфавит | |||
| 250
    
        ProxyInspector 21.11.15✎ 23:58 | 
        Что просишь, то и получаешь. Если делать поиск по словарю как (245) Словарь 100 тыс слов, 
 То "крокодил" - отработает замену трех символов за время << 1 сек. | |||
| 251
    
        Garykom гуру 21.11.15✎ 23:58 | 
        (249) очень сложно "уровень похожести" регулировать для выборки
 точнее даже никак | |||
| 252
    
        ProxyInspector 22.11.15✎ 00:00 | 
        Ты делаешь предварительную выборку по мягкой схеме ТРИ символа, а потом на результате делай уровень похожести     | |||
| 253
    
        Garykom гуру 22.11.15✎ 00:05 | 
        (252) можно конечно, но зачем?
 когда сразу можно искать с заданным уровнем похожести? причем этот поиск даже быстрее будет вот предварительная подготовка (разовая) построение хешей и запись их в базу (получение их нее) да не очень быстро | |||
| 254
    
        ProxyInspector 22.11.15✎ 09:45 | 
        (236)  
 "По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиатем кдаужЮ бкуву по отдльенотси, а все солво цликеом. " Имея словарь на 100 тыс символов. При условии, что первая и последняя буква правильная, что внутри буквы могут быть переставлены в произвольном порядке, а несколько букв добавлены, алгоритм (182) прочитает данный текст без ошибок на уровне 99%. Чуть хуже, чем человек. Человек привлекает для фильтрации контекст. | |||
| 255
    
        ProxyInspector 22.11.15✎ 09:49 | 
        Если еще хотя бы совпадал еще и слог. А вот если еще прикрутить дополнительный анализ, то может прочитать все.     | |||
| 256
    
        МуМу 22.11.15✎ 13:38 | 
        Я вас умоляю - 200 анкет в месяц явно не стоят сложных алгоритмов. ФИО в 200 записей можно и глазами просмотреть.     | |||
| 257
    
        Злопчинский 22.11.15✎ 13:41 | 
        (256) в день...
 "все что они делают руками - все плохо..." | |||
| 258
    
        Кирпич 22.11.15✎ 14:14 | 
        (256) да там алгоритм примитивный, вся программа в 20 строчек да функция расстояния Левенштейна, которая тупо копипастится из интернета.     | |||
| 259
    
        Кирпич 23.11.15✎ 10:15 | 
        Здравствуй, бложек.
 С утра встал в прекрасном настроении и сделал вариант с хешированием по сигнатуре. Отрабатывает за 1,5 секунды. Прежний вариант (154) отрабатывал за 4,5 секунды. Прогресс! | |||
| 260
    
        Garykom гуру 23.11.15✎ 10:19 | 
        (259) ага ))     | |||
| 261
    
        Garykom гуру 23.11.15✎ 10:19 | 
        (259) длина битового хеша какая?     | |||
| 262
    
        Кирпич 23.11.15✎ 10:21 | 
        (261) тупо со статьи на хабре стырил. 13     | |||
| 263
    
        Кирпич 23.11.15✎ 10:21 | 
        (261) да он у меня и не битовый. просто строка с нулями и единицами     | |||
| 264
    
        Garykom гуру 23.11.15✎ 10:27 | 
        (263) ыыыы, ты переведи на битовый )) и дальше XOR'ами
 слегка удивишься )) | |||
| 265
    
        Garykom гуру 23.11.15✎ 10:28 | 
        (264) писал уже вроде, на тестовых 1 запись среди 10к за 1 мс при подборе похожих
 это как бы тысячная доля секунды | |||
| 266
    
        Кирпич 23.11.15✎ 10:31 | 
        (264) да это не тот хеш
 ты про simhash наверное говоришь | |||
| 267
    
        Garykom гуру 23.11.15✎ 10:35 | 
        (266) а когда хеши сравниваются это уже пофиг
 от видов хешей зависит только качество поиска и скорость подготовки базы а ищем то потом все равно одинаково по числу различий в битах | |||
| 268
    
        Кирпич 23.11.15✎ 10:47 | 
        (267) да у меня после этого хеширования всего штук 300 хешей получается на твою базу из 5000 фамилий. там даже смысла нету в битах это хранить. ну сэкономлю 100 миллисекунд. фигня.
 Попробую simhash теперь запилить. | |||
| 269
    
        Кирпич 23.11.15✎ 10:51 | 
        +(268) вот для simhash важно хранить в числе и быстро разницу в битах считать, потому что там на каждую фамилию будет свой хеш, если я правильно понял эту хрень.     | |||
| 270
    
        Кирпич 23.11.15✎ 11:02 | 
        +(269) ну не на каждую фамилию, а на группу похожих фамилий.     | |||
| 271
    
        Кирпич 23.11.15✎ 11:04 | 
        Гы. Получается, в нашем случае, когда похожих ФИО мало, simhash вообще нафиг не нужен. Тратить время на его создание глупо и смешно, если он действительно долго создается.     | |||
| 272
    
        Garykom гуру 23.11.15✎ 11:27 | 
        (271) нет не долго, долго это относительно поиска по нему 
 (269) (270) не совсем, для симхеш можно просто нужную длину выбирать и этим регулировать как хочется размеры похожести | |||
| 273
    
        Кирпич 23.11.15✎ 11:38 | 
        (272) ну у тебя сколько по времени хеши генерятся?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |