Привет
Предлагаю обсудить такой вопрос (уже не первый раз вижу его в требованиях заказчиков) - Неточный поиск в Salesforce. Пример описания неточного поиска по адресу:
Вообще такое можно как-то решить в Salesforce или с помощью других подручных средств? Как по мне тут минимум нужен искусственный интеллект на уровне живой девушки . Но может я не в теме и это все очень просто решается?
Привет Предлагаю обсудить такой вопрос (уже не первый раз вижу его в требованиях заказчиков) - [b]Неточный поиск в Salesforce[/b]. Пример описания неточного поиска по адресу: [quote]Самый тонкий момент заключается в том, что к сожалению в адресах в источнике данных допускается много вариантов написания одного и того же названия, ошибок и опечаток и ЭТО НЕЛЬЗЯ ИЗМЕНИТЬ.[/quote] Вообще такое можно как-то решить в Salesforce или с помощью других подручных средств? Как по мне тут минимум нужен искусственный интеллект на уровне живой девушки :) . Но может я не в теме и это все очень просто решается?
есть вшитый LIKE, он конечно далек от идеала ) но я не думаю что в данном случае надо изобретать колесо
SELECT id,name From Account WHERE name Like '%United%'
есть вшитый LIKE, он конечно далек от идеала ) но я не думаю что в данном случае надо изобретать колесо SELECT id,name From Account WHERE name Like '%United%'
[quote="Андрей"]есть вшитый LIKE, он конечно далек от идеала ) но я не думаю что в данном случае надо изобретать колесо SELECT id,name From Account WHERE name Like '%United%'[/quote] И как он поможет найти Unnited?
Генетические алгоритмы, правда их обучать надо.
Генетические алгоритмы, правда их обучать надо.
А, так, есть уже куча готовых решений.
А, так, есть уже куча готовых решений.
[quote="Gres"]А, так, есть уже куча готовых решений.[/quote] Можешь привести примеры? Я так понимаю что "куча готовых решений" это не относится к Salesforce.
Я вот завтра скорее всего буду писать нечеткий поиск, если не ошибаюсь, то можно использовать динамическое програмирование. Нужно только зафиксировать количество допустимих ошыбок. Я как-то на С++ писал решение, так на длине строки в 2.000.000 символом, и при длине слова в 50 символов, решение работало за 50+мс(характеристики тестилки не знаю, но знаю что не очень). Если кому-то интересно могу скинуть свой код, только он на С++(скажу сразу код не очень читабелен, так как на соревнованиях про "чистоту" кода вообще не думаеш).
Я вот завтра скорее всего буду писать нечеткий поиск, если не ошибаюсь, то можно использовать динамическое програмирование. Нужно только зафиксировать количество допустимих ошыбок. Я как-то на С++ писал решение, так на длине строки в 2.000.000 символом, и при длине слова в 50 символов, решение работало за 50+мс(характеристики тестилки не знаю, но знаю что не очень). Если кому-то интересно могу скинуть свой код, только он на С++(скажу сразу код не очень читабелен, так как на соревнованиях про "чистоту" кода вообще не думаеш).
C++ это конечно круто, но там, как и во многих "полноченных" языках программирования уверен уже есть готорые решения. Пока попробуем по максимуму вытянуть из Salesforce.
Вот еще тогда в тему.
Разговаривал с одним коллегой (кстати тоже с С++) он обмолвился что задачи неточного поиска решаются с помощью алгоритма (или как там правильно это называется) вычисления Расстояние Хэмминга
Это как-то применимо к Salesforce?
C++ это конечно круто, но там, как и во многих "полноченных" языках программирования уверен уже есть готорые решения. Пока попробуем по максимуму вытянуть из Salesforce. [quote="Alex Tsitsura"]Если кому-то интересно могу скинуть свой код[/quote] Лучше на пальцах объясни. Вот еще тогда в тему. Разговаривал с одним коллегой (кстати тоже с С++) он обмолвился что задачи неточного поиска решаются с помощью алгоритма (или как там правильно это называется) вычисления [url=https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%A5%D1%8D%D0%BC%D0%BC%D0%B8%D0%BD%D0%B3%D0%B0]Расстояние Хэмминга[/url] Это как-то применимо к Salesforce?
вот еще нагуглил
Расстояние Левенштейна
UPD: по ходу этих "расстояний" там много
:) вот еще нагуглил [url=https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0]Расстояние Левенштейна[/url] UPD: по ходу этих "расстояний" там много :)
[quote="Dmitry Shnyrev"]Можешь привести примеры? Я так понимаю что "куча готовых решений" это не относится к Salesforce.[/quote] Даже в СФ видел что-то подобное для маппинга/трансформации данных, но сейчас сходу не могу нагуглить пакет.
Советую начать с левенштейна. В большинстве языков такой инструмент есть из коробки, apex не исключение -
Советую начать с левенштейна. В большинстве языков такой инструмент есть из коробки, apex не исключение - http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_string.htm#apex_System_String_getLevenshteinDistance
О, это уже интересно! Спасибо за ссылку.
В принципе теперь можно организовать отлавливание ошибок в тексте.
Сформировать набор шаблонов и прогонять по ним входящие данные. Если Расстояние Левенштейна 0 значит 100% попадание. Если в пределах значения близкого к нуля, то можно говорить о подобии определенному шаблону.
Круто!
О, это уже интересно! Спасибо за ссылку. В принципе теперь можно организовать отлавливание ошибок в тексте. Сформировать набор шаблонов и прогонять по ним входящие данные. Если Расстояние Левенштейна 0 значит 100% попадание. Если в пределах значения близкого к нуля, то можно говорить о подобии определенному шаблону. Круто!
Хотя для отлавливания имен будет не очень эффективно.
Например Георгий - Жора, Александр - Шурик и т.п.
Хотя для отлавливания имен будет не очень эффективно. Например Георгий - Жора, Александр - Шурик и т.п.
Ну я думаю в финансовых документах никто не будет писать Жора и Шурик
В вот девочка на почте вполне может записать вместо Московской области Масковская.
А как интересно Расстояние Левенштейна отнесется к перестановке слов?
Ну я думаю в финансовых документах никто не будет писать Жора и Шурик :) В вот девочка на почте вполне может записать вместо Московской области Масковская. А как интересно Расстояние Левенштейна отнесется к перестановке слов?
Если записей в целевой таблице будет много (более 1 млн.), то неточный поиск может оказаться очень ресурсоемким. Script statements убрали, но оставшиеся лимиты на размеры soql запросов и cpu time могут сильно обломать, когда начнут вылезать.
Для небольших проектов, думаю, пойдет. У басурман такое называется "Fuzzy Search" - решения и примеры вроде есть.
Если записей в целевой таблице будет много (более 1 млн.), то неточный поиск может оказаться очень ресурсоемким. Script statements убрали, но оставшиеся лимиты на размеры soql запросов и cpu time могут сильно обломать, когда начнут вылезать. Для небольших проектов, думаю, пойдет. У басурман такое называется "Fuzzy Search" - решения и примеры вроде есть.