?

Log in

No account? Create an account

June 24th, 2013

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

Данная обработка производит поиск в несколько этапов по уровню возрастания сложности:
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

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

Умка с Борей Каннуниковым в США. Квартирник в Чикаго...

Умка хороша как всегда. Но вот такая загадка -- в этой песенке Умка дважды поминает одного и того же человека
Первый раз:
"Об этом когда-то какой-то еврей
Пропел какой-то куплет"

И второй:
"С тех пор как песню запел Циммерман..."

О ком идет речь?

UPD. А вот и ответ