torin_kr (torin_kr) wrote,
torin_kr
torin_kr

Category:

Профессиональное -- Поиск в справочниках по "неточному" наименованию

Часто возникает задача найти элемент справочника по его "неточному" наименованию.
Это может быть:
- при загрузке данных из другой базы или внешнего файла
- при проверке на возможность "двойников" в справочнике
- ....

Данная обработка производит поиск в несколько этапов по уровню возрастания сложности:
1 На первом этапе просто ищется элемент справочника по наименованию
2 Если элемент не найден, строка наименования разбивается на слова и ищется запросом по конструкции "где наименование подобно "слово1%слово2%слово3%..." . Таким образом решается проблема "лишних пробелов" между словами
3 Если элемент не найден, составляется массив всех возможных перестановок слов и процедура п.2 повторяется для каждой из возможных перестановок
4. Если элемент не найден, используется поиск по неточному наименованию с использованием внешней компоненты StrMatch.dll. Компонента "зашита" в макет и не требует копирования и регистрации себя на компьютере пользователя ПРИ УСЛОВИИ НАЛИЧИЯ У ПОЛЬЗОВАТЕЛЯ ПРАВ ЛОКАЛЬНОГО АДМИНИСТРАТОРА. Если у пользователя таких прав нет, тогда необходимо выгрузить компоненту в файл с помощью кнопки "выгрузить ДЛЛ" и попросить вашего системного администратора поместить ее в папку исполняемых файлов 1С и зарегистрировать командой RegSvr32.
Почему 4 пункт реализован через dll, а не средствами встроенного полнотекстового поиска 1С? Потому что средства полнотекстового поиска предлагают функционал, схожий с поиском по шаблонам. Вот смотрите, цитата из синтаксис-помошника 1С:
"# - нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос "#Система" найдет "систама", "сивтема"; запрос "Система#2" найдет "ситтама", "сеттема";"
Но вот слово "ситемас" запрос "Система#2" НЕ НАЙДЕТ, хотя с "человеческой" точки зрения здесь всего ОДНА ошибка - буква "с" перемещена с третьей позиции на седьмую. ДЛЛ-ка ищет не по шаблону, она предлагает некую метрику подобия двух тестовых строк -- в частности эта ДЛЛ-ка предлагает n-граммную метрику, для которой в слове "ситемас" ДВЕ ошибки, (а не 5 как по шаблону). Это значительно ближе к человеческой логике поиска.

Вот картинки:

1 Поиск в случае обратного порядка слов
ziytt z neytcxkn nblstnr ydmi

2. Поиск по неточному наименованию с пропущенной буквой
wyqal c eforytyqlk

А это ссылка на обработку:
http://yadi.sk/d/DlRfJp3T677M6

Пользуйтесь. мне не жалко... 
Tags: Профессиональное
Subscribe
promo torin_kr december 5, 2015 19:43 25
Buy for 200 tokens
Этот пост -- заказной. Меня его попросила написать одна моя хорошая знакомая, с которой мы знакомы такое количество лет. что аж страшно становится. Как говорит в таких случаях мой младший брат -- "Да ну нафиг. Столько и не живут". Живут... к сожалению. Ладно, это было лирическое…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments