Привет
Предлагаю обсудить такой вопрос (уже не первый раз вижу его в требованиях заказчиков) - Неточный поиск в Salesforce. Пример описания неточного поиска по адресу:
Вообще такое можно как-то решить в Salesforce или с помощью других подручных средств? Как по мне тут минимум нужен искусственный интеллект на уровне живой девушки
. Но может я не в теме и это все очень просто решается?
есть вшитый LIKE, он конечно далек от идеала ) но я не думаю что в данном случае надо изобретать колесо
SELECT id,name From Account WHERE name Like '%United%'
Генетические алгоритмы, правда их обучать надо.
А, так, есть уже куча готовых решений.
Я вот завтра скорее всего буду писать нечеткий поиск, если не ошибаюсь, то можно использовать динамическое програмирование. Нужно только зафиксировать количество допустимих ошыбок. Я как-то на С++ писал решение, так на длине строки в 2.000.000 символом, и при длине слова в 50 символов, решение работало за 50+мс(характеристики тестилки не знаю, но знаю что не очень). Если кому-то интересно могу скинуть свой код, только он на С++(скажу сразу код не очень читабелен, так как на соревнованиях про "чистоту" кода вообще не думаеш).
C++ это конечно круто, но там, как и во многих "полноченных" языках программирования уверен уже есть готорые решения. Пока попробуем по максимуму вытянуть из Salesforce.
Вот еще тогда в тему.
Разговаривал с одним коллегой (кстати тоже с С++) он обмолвился что задачи неточного поиска решаются с помощью алгоритма (или как там правильно это называется) вычисления Расстояние Хэмминга
Это как-то применимо к Salesforce?
вот еще нагуглил
Расстояние Левенштейна
UPD: по ходу этих "расстояний" там много ![]()
Советую начать с левенштейна. В большинстве языков такой инструмент есть из коробки, apex не исключение -
О, это уже интересно! Спасибо за ссылку.
В принципе теперь можно организовать отлавливание ошибок в тексте.
Сформировать набор шаблонов и прогонять по ним входящие данные. Если Расстояние Левенштейна 0 значит 100% попадание. Если в пределах значения близкого к нуля, то можно говорить о подобии определенному шаблону.
Круто!
Хотя для отлавливания имен будет не очень эффективно.
Например Георгий - Жора, Александр - Шурик и т.п.
Ну я думаю в финансовых документах никто не будет писать Жора и Шурик
В вот девочка на почте вполне может записать вместо Московской области Масковская.
А как интересно Расстояние Левенштейна отнесется к перестановке слов?
Если записей в целевой таблице будет много (более 1 млн.), то неточный поиск может оказаться очень ресурсоемким. Script statements убрали, но оставшиеся лимиты на размеры soql запросов и cpu time могут сильно обломать, когда начнут вылезать.
Для небольших проектов, думаю, пойдет. У басурман такое называется "Fuzzy Search" - решения и примеры вроде есть.