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