Показать сообщение отдельно
Старый 14.10.2010, 09:12   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
Кто-нибудь делал функцию нечеткого сравнения строк ?
ну... здесь не совсем нечеткое сравнение.
нечеткое сравнение предполагает, что строки могут чуть-чуть отличаться в любом месте
алгоритм нечеткого сравнения безумно тяжелая штука и, скорее всего, будет работать долго.

здесь же предполагается, что есть некое ядро из одинаковых СЛОВ.
плюс-минус несколько разделителей и/или других слов.

если у вас ax2009 или ax4, то воспользуйтесь агентом данных:
1. главное меню \ основное \ настройка \ агент данных
2. добавьте вашу таблицу с названиями.
3. запустите агент данных.
4. пусть он переиндексирует все записи таблицы (заодно у вас заработает глобальный поиск )

в результате работы агента:
5. все тексты будут разбиты на слова, которые будут хранится в таблице SysSearchName
6. а в таблице SysSearchPath будут ссылки на выделенные слова и ссылки на записи.

Ваша задача - найти такие записи, у которых максимальное число общих слов.
А это уже вполне подъемный запрос (в отличие от алгоритма нечеткого сравнения строк ВСЕ-СО-ВСЕМИ).
А если вы еще выделите незначимые слова (ООО, Ltd и т.п.) и не будете учитывать их при подсчете, то будет вообще хорошо.

обратите внимание, что разбивка по словам выполняется в методе SysSearch::splitIntoWords
может быть, стоит допилить этот метод, чтобы научить его новым трюкам и разделителям.
__________________
полезное на axForum, github, vk, coub.