|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Есть таблица личных данных после ручного ввода: Фио и адрес (необязатеьно российский) Некая функция часто обращается к таблице и просит найти дубликаты для некой персоны. В том числе те, которые имеют отличия в написании. И желательно быстро. По этой причине использование Дамерау-Левенштайна, по крайней мере в лоб, видится проблематично. Есть ли оправдавшие себя подходы к проблеме или советы? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 12:20 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us и просит найти дубликаты для некой персоны Функция тоже получает значение из ручного ввода или оперирует одним из значений этой таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 12:52 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us, а если использовать хеширование по сигнатуре? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 13:21 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
env Функция тоже получает значение из ручного ввода или оперирует одним из значений этой таблицы? Могут быть оба варианта. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 13:35 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
ptr128 а если использовать хеширование по сигнатуре? Извините, что не понял Вашу идею. Могли бы Вы чуть подробнее объяснить? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 13:49 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us, Какая-нибудь внешняя поисковая система с возможностью нечеткого поиска (например Elastic Search) плюс интеграция с ней через SQL CLR ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 14:12 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
invm, Спасибо, попробую. А эта штука платная? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 14:18 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us, погуглите. ES распостраняется по лицензии apache. можно свитать что бесплатно ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 14:19 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us, SSIS имеет средство нечеткого сравнения. Данные можно периодически обрабатывать таким образом с формированием "отсева". ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 14:44 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Владислав Колосов, Тогда придётся вызывать исполнение SSIS пакета по каждому запросу на поиск. Ведь данные в таблице могут обновляться: идут вставки, иногда удаления. Мне кажется, это не совсем то, что я бы хотел. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 15:17 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us И желательно быстро. По этой причине использование Дамерау-Левенштайна, по крайней мере в лоб, видится проблематично. Есть ли оправдавшие себя подходы к проблеме или советы? invm Alexander Us, Какая-нибудь внешняя поисковая система с возможностью нечеткого поиска (например Elastic Search) плюс интеграция с ней через SQL CLR А чо, внешняя система способна быстро искать в какой-то базе, без передачи данных в эту систему? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 15:20 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
aleks222 А чо, внешняя система способна быстро искать в какой-то базе, без передачи данных в эту систему? Само-собой, данные придется туда передавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 15:36 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us, Можете поиграться со штатным FTS и containstable с запросом ISABOUT. Примерно так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 15:42 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
invm, Спасибо, обязательно попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 15:50 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
ptr128 Спасибо за ссылку. Сейчас нет времени всё обстоятельно прочитать, но такую или похожую штуку я уже делал для ускорения поиска Дамерау-Левенштайном в отдельном приложении: если сформировать битовый хэш для двух строк, и, два хэша отличаются, скажем на 4 бита, то можно сказать, что две строки отличаются как минимум на 4 символа. Так можно не сравнивать Дамерау-Левенштайном строки, которые имеют слишком много отличий. Это хорошо (приемлимо) работает в отдельном приложении, но мне сейчвс надо SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 16:40 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us, Количество хешей может быть существенно меньшим, чем количество слов, да и сравнивать хеши намного быстрее. Сканирование отдельной таблицы хешей позволит на первом этапе существенно ограничить список строк из основной таблиц, по которым уже производится сравнение Дамерау-Левенштайном. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 16:53 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
ptr128, да, конечно, это я уже реализовал в приложении. Но этот способ, как мне кажется, не очень хорошо подходит для SQL сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 17:12 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us ptr128 Спасибо за ссылку. Сейчас нет времени всё обстоятельно прочитать, но такую или похожую штуку я уже делал для ускорения поиска Дамерау-Левенштайном в отдельном приложении: если сформировать битовый хэш для двух строк, и, два хэша отличаются, скажем на 4 бита, то можно сказать, что две строки отличаются как минимум на 4 символа. Так можно не сравнивать Дамерау-Левенштайном строки, которые имеют слишком много отличий. Это хорошо (приемлимо) работает в отдельном приложении, но мне сейчвс надо SQL. По-моему расстояние Левентшайна означает количество преобразований исходной строки в целевую, это к слову. Можно ничего не делать, а взять SOUNDEX ( character_expression ) Если делать, то в ы можете взять алгоритм Питера Норвига, простейший прообраз гугловского "Did you mean" https://norvig.com/spell-correct.html Там в конце есть список языков, на которых реализован поиск. Можно дописать на SQL, но я делал SQL CLR функцию+таблицу с английскими словами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 17:19 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Ролг Хупин, Спасибо за ссылку. Интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 17:35 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us, а зачем это делать на лету? Вопросы приведения базы в порядок можно решать при регулярном обслуживании. Стремление выполнять какие-то преобразования синхронно со вставкой не всегда оправданы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 19:03 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Владислав Колосов, Да, но не в этом случае. Скажем, в таблицу вносятся персоны, и тут же приходит запрос на определение дубликатов. Было бы нежелательно заставлять пользователя ждать, пока исполнится пакет и приведет всё "в порядок". К тому же, задача по нечёткой группировке списков уже решена в отдельном приложении (0,5 млн группируются ~за 5 мин). В данном случае нужен поиск дубликатов "на лету". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2021, 11:28 |
|
Нечёткий поиск
|
|||
---|---|---|---|
#18+
Alexander Us, если вы тут же формируете распечатку по этим данных, то это важно, если нет, то данные сохранены только в базе и порядок их трансформации не имеет значения. Например, при заполнении фамилий или адресов оператор получает на экране список похожих значений и сам принимает решение о выборе. Всегда надо принимать во внимание, что нечеткое сравнение лишь предполагает, что два значение могут быть одним и тем же. Если брать результат его сравнения за истину, то неизбежны ошибки, например, в результате опечаток. В некоторых случаях поиск схожих значений лучше поручить клиентскому приложению, подгрузив в него справочник. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2021, 12:13 |
|
|
start [/forum/topic.php?fid=46&msg=40035522&tid=1685216]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 533ms |
0 / 0 |