|   |   | 
| 
 | Нечеткий поиск. | ☑ | ||
|---|---|---|---|---|
| 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 символах нужно умудриться. Всем спасибо за помощь! И веселых праздников=)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |