Имя: Пароль:
1C
1С v8
Нечеткий поиск.
0 Labrador
 
01.11.13
07:55
Товарищи! Столкнулся с такой вот ситуацией: Есть у нас справочник Номенклатура, есть файлик эксель в котором номенклатуре соотвествует еще 2 реквизита, которые нужно достать. А проблема в том, что в файле название номенклатуры может отличаться наличием точек, пробелов и т.д. В это случае сильно бы спас ПолнотекстовыйПоиск, но насколько я понимаю ищет он по данным ИБ, а не во временных таблицах.

P.S. перебрать загруженные данные из таблицы неоптимально т.к. там несколько сот тысяч строк.
1 dachnik
 
01.11.13
08:02
вот, вспомнил, погуглил... "Нечёткое множество (иногда размытое, расплывчатое, туманное, путанное, пушистое) — понятие, введённое Лотфи Заде в 1965 году" тут непаханое поле для изобретательства!
2 Rie
 
01.11.13
08:04
(0) Ну так удали точки, пробелы и т.д. И затем - сравнивай.
Либо определи функцию расстояния между строками - и считай строки одинаковыми, если расстояние меньше некоего (правда, это - чуток медленнее будет).
3 Labrador
 
01.11.13
08:12
(2) Была бы хоть какая-нибудь закономерность в этих точках, пробелах... Но увы, механически не получится. Вот к примеру в номенклатуре "Неведомая Искомая фигня АН-02, 3 шт." в файле выглядит как "неведомая искомая фигня ан02. 3шт". Если я правильно понял =)
(1) Я тоже гуглил. И даже примерный алгоритм накидал и прикинул трудозатраты. А случаем никто на внешние компоненты не натыкался? Я сейчас даже на платные согласен! В крайнем случае писать придется самостоятельно.
4 Wobland
 
01.11.13
08:15
а погрузить это дело в ИБ?
5 Rie
 
01.11.13
08:16
(3) Тогда - функция расстояния. Медленно будет. Но иных вариантов - нет.
Причём функцию расстояния - тебе изобретать. (Ну, либо заказать кому, если самому лень. Это к тому, что тут нет универсального решения. Тем более - в виде внешних компонент).
6 Rie
 
01.11.13
08:16
(4) А толку-то? LIKE - маломощен в свете (3). (Он даже регулярки не умеет). Так что по любому - своя функция. Которой по фигу, откуда ей параметры прилетают.
7 dachnik
 
01.11.13
08:17
(3) В одной конторе работал, там случай был (до меня) - по рассказам очевидцев одна бушка запустила групповое перепроведение колоссального количества документов, так изобретали обработку поиска реквизитов по журналу регистрации с элементами как раз твоего садомазо поиска, но было все это на семерке ещё, без использования каких-либо компонент, так что все решаемо, удачи!
8 Wobland
 
01.11.13
08:19
(6) не знаю, как насчёт лайков, но автору хочется полнотекстовый поиск
9 Rie
 
01.11.13
08:21
(8) Нет, не полнотекстовый. Полнотекстовый поиск даст ему больше результатов, чем ему надо. Пример в (3) показывает, что он хочет - сравнить две строки по _некоторому_ признаку подобия. Типа Soundex - но Soundex ему не подойдёт.
10 Галахад
 
гуру
01.11.13
08:24
(4) + 1.

(9) Полнотекстовый нормально работает.
11 Wobland
 
01.11.13
08:25
а "неведомая искомая фигня ан02. 3шт" из екселя чему соответствует? "Неведомая Искомая фигня АН-02, 3 шт." или  "Неведомая Искомая фигня АН02, 3 шт." или  "Неведомая Искомая фигня AH-02, 3 шт."?
12 vde69
 
модератор
01.11.13
08:25
писать в базу (в регистр) и не удалять, хранить как историю...

а вот что-бы ограничить область (испать например только в обной дате) делюсь красивым решением

v8: как ограничить полнотекстовый поиск выборкой из регистра
13 Rie
 
01.11.13
08:27
(10) Полнотекстовый - прекрасно работает. Но, IMHO, задачу из (0)-(3) - не решает.
14 vde69
 
модератор
01.11.13
08:29
(13)

Неведомая AND Искомая AND фигня AND АН-02 AND 3 шт

плюс порог поиска даст результат
15 Rie
 
01.11.13
08:31
(12) Решение - очень красивое. Но только для случая, когда операторы вводили всё верно.
16 Rie
 
01.11.13
08:31
(14) А ты уверен, к примеру, что от порядка слов не зависит?
17 vde69
 
модератор
01.11.13
08:36
(16) уверен, кроме того нечеткий поиск учитывает склонения и английские синонимы/транслит реально нечеткий поиск рулит...
18 Labrador
 
01.11.13
08:37
(17) Спасибо, а ведь правда идея! Спасибо, будем пробовать.
19 Rie
 
01.11.13
08:44
(17) А какие слова в наименовании являются значимыми? В (14) - ну, очевидно, что АН-02 - значимо. А вот "неведомая"? Которая может в базе быть "неизвестной"? А может быть и "черно-бурая хреновина" (поскольку товар был определён).
20 Wobland
 
01.11.13
08:49
(19) ну ты же знаешь, что кнопка СделатьВсё бывает только в древнегреческих мифах
21 Serg_1960
 
01.11.13
09:28
(0) Было нечто подобное. Объём, правда сказать, небольшой - около двух-трех тысяч наименований.

Писал обработку "на базе" StrMatch. Около 87% соответствия, остальное ручками сводить пришлось(очень много позиций было, где наименования друг от друга отличались всего на один-два символа - в таких случаях вероятность крайне низкая).

Начало обработки можно сказать - банальное :)

Попытка
    ЗагрузитьВнешнююКомпоненту("StrMatch.dll");
    StrMatch = Новый ("AddIn.StrMatchExtension");
    ИспользоватьКомпоненту = Истина;
Исключение
    Сообщить(ИнформацияОбОшибке().Описание);
    ИспользоватьКомпоненту = Ложь;
КонецПопытки;
22 Labrador
 
01.11.13
09:30
(21) Оу, здорово! А описание к ней подробное есть? Сейчас погуглил, не нашел чтото =( Может не на том гугле ищу...
23 kiruha
 
01.11.13
09:49
Издеваешься ?
3 600 примеров , из них 45 на мисте, несколько разработок на инфострарте - качай и пользуйся
24 Labrador
 
01.11.13
09:54
После того как сообщение отправил, понял что издеваюсь, руки нужно прямить, ибо сделать 3 ошибки в 8 символах нужно умудриться. Всем спасибо за помощь! И веселых праздников=)
Закон Брукера: Даже маленькая практика стоит большой теории.